我对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
,但是它也不起作用。
答案 0 :(得分:2)
对于找不到文件的问题,您需要将CMD ['/root/readlogs.sh']
替换为CMD [ "/root/readlogs.sh" ]
。注意双引号和空格。
但是即使解决了这个问题,您仍然会有另一个问题,那就是您试图在高山地区使用bash
。因此,您需要像Linpy所说的那样更改为sh
。