cron作业没有在ubuntu上的docker容器内运行

Tri*_*yen 26 ubuntu cron docker

我有一个简单的Dockerfile如下

FROM ubuntu:latest

ADD crontab /etc/cron.d/test-cron

RUN chmod a+x /etc/cron.d/test-cron
RUN touch /var/log/cron.log

CMD cron && tail -f /var/log/cron.log
Run Code Online (Sandbox Code Playgroud)

crontab文件的内容一样简单

* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
# empty line
Run Code Online (Sandbox Code Playgroud)

当我在我的本地OS X机器上运行它(运行docker-machine)时,它工作正常("Hello world"每分钟打​​印到日志文件).但是,当我尝试在Ubuntu机器上运行它时,cron作业不会运行(空日志文件).

这是我用来运行容器的命令

docker build -t crontest .
docker run --name cron crontest
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样.我想知道我的Ubuntu盒子是否有问题(错误的时间设置?).我试图重启该机器无效.我目前在Ubuntu盒子上运行其他docker容器,它们运行正常.

关于如何调试/修复此问题的任何建议都将非常受欢迎.

编辑:

进入容器(docker exec -it cron /bin/bash)后,我可以验证cron是否在那里运行:

root@a2ad451af8d9:/# ps -ef | grep cron
root         1     0  0 20:15 ?        00:00:00 /bin/sh -c cron && tail -f /var/log/cron.log
root         6     1  0 20:15 ?        00:00:00 cron
root         7     1  0 20:15 ?        00:00:00 tail -f /var/log/cron.log
root        25    11  0 20:21 ?        00:00:00 grep --color=auto cron
Run Code Online (Sandbox Code Playgroud)

Dza*_*ton 34

在容器内安装rsyslog apt-get install rsyslogrsyslogd在启动cron之前使用该命令启动它cron -L15(最大日志记录).然后观察/var/log/syslog容器内的文件以查看cron守护程序自己的日志输出.它将告诉您解析crontab时是否存在问题,在您的情况下,如果已注册并且正在尝试运行您的作业,则会在每分钟记录一个与下面类似的条目.

CRON[16]: (root) CMD (echo "Hello world" >> /var/log/cron.log 2>&1)

  • 我在docker容器下遇到了同样的问题.您的解决方案对我有用,但我必须在/ var/log(touch/var/log/syslog)下创建syslog文件并将其所有者更改为syslog:adm(chown syslog:adm/var/log/syslog).在cron对syslog说话时,我发现了这个:/ usr/sbin/cron [2990] :( root)INSECURE MODE(模式0600预期)(crontabs/root).所以我必须设置正确的权限模式0600(chmod 0600/var/spool/cron/crontabs/root).在那之后,一切都很好. (2认同)