我有以下
Dockerfile
:
FROM centos:7
RUN yum -y install crontabs
COPY --chmod=0644 dockerfiles/crontab /etc/cron.d/server-cron
RUN crontab /etc/cron.d/server-cron
RUN touch /var/log/cron.log
CMD crond && tail -f /var/log/cron.log
crontab
文件里面的内容如下:
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
当容器启动并运行时,我可以看到 cron 服务器正常工作,因为
tail -f
正在将 Hello world
打印到控制台,但也打印以下错误:
/bin/sh:root:找不到命令
我在 Google 上搜索过,但没有发现与 Docker 相关的内容:
(以及更多)
有没有办法在 Docker 容器中消除此错误,或者我应该忽略它并不管它?
TLDR;从 Dockerfile 中删除此行:
RUN crontab /etc/cron.d/server-cron
更长的解释:
您实际上是在尝试运行 cronjob 两次。
当运行 Dockerfile 时,您正在创建一个用户 cronjob:
RUN crontab /etc/cron.d/server-cron
crond
还将运行目录 /etc/cron.d/
中定义的任何内容(这些是系统 cronjobs)。
所以你看到的是第一个 cronjob(由 crontab 加载的)失败。正如您发布的第一个链接中所解释的。使用 crontab 加载的 Cronjobs 具有不同的格式,并且不应定义用户(它们始终以创建它的用户身份运行)。
但是您还会看到第二个 cronjob(在
/etc/cron.d
下定义的文件)成功,因为它的格式正确,定义了用户。