Docker COPY sh脚本不起作用(未找到)

时间:2019-12-03 11:32:23

标签: docker docker-compose

我对Docker并不陌生,但我主要使用预先构建的映像,这些映像是使用docker-compose连接的。我需要一个超级基础容器,因为我在另一个容器中有权限问题,所以它只读取日志文件并将内容流式传输到stdout。

请参阅: https://github.com/webdevops/Dockerfile/issues/332

无论如何-我第一步失败了,不知道出了什么问题

这是我的Dockerfile:

FROM alpine:latest
COPY readlogs.sh /root/readlogs.sh
CMD ['/root/readlogs.sh']

sheel脚本看起来像这样(目前-我正在测试)

#!/usr/bin/env bash
echo "hello world"

#cat /dev/null > /var/log/app/error.log
#cat /dev/null > /var/log/app/debug.log

#tail -f /var/log/app/error.log > /dev/stderr &
#tail -f /var/log/app/debug.log > /dev/stdout &

如您所见,我想截断一些日志文件,然后连续读取它。

构建图像效果很好,启动结果如下:

/bin/sh: [/root/readlogs.sh]: not found
exited with code 127

否-行尾不是DOS。

我的docker-compose.yml

  logreader:
    build:
      context: docker/logreader
      dockerfile: Dockerfile
    volumes:
      - ./var/logs:/var/log/app

那么-为什么放克我不能执行readlogs.sh文件?

该文件是可执行的(在主机上),我尝试添加RUN chmod +x /root/readlogs.sh,但是它也不起作用。

1 个答案:

答案 0 :(得分:2)

对于找不到文件的问题,您需要将CMD ['/root/readlogs.sh']替换为CMD [ "/root/readlogs.sh" ]。注意双引号和空格。

但是即使解决了这个问题,您仍然会有另一个问题,那就是您试图在高山地区使用bash。因此,您需要像Linpy所说的那样更改为sh