我如何在Docker中运行cron? (即使使用简单的crontab也没有作业/输出)

我试图把一个cronjob放在我的docker容器里面,它运行一个python脚本。

我的Dockerfile:

FROM python:3.6.2 RUN apt-get update && apt-get -y install cron ADD . /dir WORKDIR /dir RUN pip install -r requirements.txt RUN chmod 0644 /dir ADD crontab /dir ENV NAME loader CMD cron -f 

我的crontab文件:

 * * * * * root /loader.py 

正如我运行:

 $ docker run -t -i loader:latest 

10分钟后我什么也得不到。 脚本在运行时写出Hello World。 我从docker镜像中删除了cron,脚本工作并写出Hello world

正如我试图简化的东西,我试图离开的脚本,所以cron只写出喜欢这样的每一分钟像嗨:

 * * * * * root echo "hi" 

但没有任何反应。

有几个问题。

首先,像@charlesduffy提到的那样,你需要安装你的crontab文件, cron会find它(例如/etc/crontab )。 出于testing目的,我使用了以下crontab文件:

 * * * * * root date > /tmp/flagfile 

我使用Dockerfile构build了一个映像,但是我添加了一个syslog服务来查看来自cron的日志消息。 我的Dockerfile看起来像:

 FROM python:3.6.2 RUN apt-get update && apt-get -y install cron busybox ADD . /dir WORKDIR /dir RUN chmod 0644 /dir COPY crontab /etc/crontab ENV NAME loader CMD busybox syslogd && cron -f 

容器运行后,我在/var/log/messages看到以下内容:

 Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (CRON) INFO (pidfile fd = 3) Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab) Dec 11 19:49:54 1d77fad4bf9d cron.info cron[9]: (CRON) INFO (Running @reboot jobs) 

看起来cron/etc/crontab上的权限感到不满。 我修改了我的Dockerfile来修复:

 FROM python:3.6.2 RUN apt-get update && apt-get -y install cron busybox ADD . /dir WORKDIR /dir RUN chmod 0644 /dir COPY crontab /etc/crontab RUN chmod 600 /etc/crontab ENV NAME loader CMD busybox syslogd && cron -f 

现在,如果我运行容器,大约一分钟后,我看到/tmp/flagfile显示,并在/var/log/messages我看到:

 Dec 11 19:57:16 dda8a21d48a4 cron.info cron[10]: (CRON) INFO (pidfile fd = 3) Dec 11 19:57:16 dda8a21d48a4 cron.info cron[10]: (CRON) INFO (Running @reboot jobs) Dec 11 19:58:01 dda8a21d48a4 authpriv.err CRON[71]: pam_env(cron:session): Unable to open env file: /etc/default/locale: No such file or directory Dec 11 19:58:01 dda8a21d48a4 authpriv.info CRON[71]: pam_unix(cron:session): session opened for user root by (uid=0) Dec 11 19:58:01 dda8a21d48a4 cron.info CRON[72]: (root) CMD (date > /tmp/flagfile) Dec 11 19:58:01 dda8a21d48a4 authpriv.info CRON[71]: pam_unix(cron:session): session closed for user root