【发布时间】:2017-05-05 10:04:37
【问题描述】:
将 Docker for Mac 1.13.1 与以下 Dockerfile 一起使用:
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
#Install packages and clean downloaded packages in the lowest layer
RUN apt-get update && apt-get -y install cron && rm -rf /var/lib/apt/lists/*
# Add crontab file in the cron directory
ADD crontab /etc/cron.d/hello-cron
# Give execution rights on the cron job and create the log file to tail in the next layer
RUN chmod 0644 /etc/cron.d/hello-cron && touch /var/log/cron.log
# Run the command on container startup
CMD echo "starting" && echo "continuing" && (cron) && echo "tailing..." && tail -f /var/log/cron.log
带有一个contab文件:
* * * * * root echo "Hello world `date`" >> /var/log/cron.log 2>&1
# Don't remove the empty line at the end of this file. It is required to run the cron job
当我构建并运行它时:
docker build -t docker-cron-master .
docker run docker-cron-master
我看到了输出:
docker run docker-cron-master
starting
continuing
tailing...
如果我等一下,tail -f 输出不会出现。然而,如果我登录到正在运行的容器并尾随文件,我可以看到内容:
$ docker exec -it 4eda6b1fc6ce bash
root@4eda6b1fc6ce:/# tail -f /var/log/cron.log
Hello world Fri May 5 09:53:01 UTC 2017
Hello world Fri May 5 09:54:01 UTC 2017
我尝试在 CMD 末尾添加另一个 echo 以查看它是否只是 STDOUT 被吞下的最后一个命令,但这没有帮助。
我已将代码发布在 github 上 https://github.com/simbo1905/docker-cron
谢谢!
【问题讨论】:
-
使用
exec运行您的主程序(尾部),否则它不会收到 Ctrl-C(退出)信号。这也可能解决您的问题。&& exec tail -f ..
标签: docker dockerfile