Cron作业不会在Docker容器中运行

时间:2019-09-11 11:24:54

标签: docker cron

我试图安排一个任务在我的容器中运行,但是无法让cron执行任何事情。

我同时关注How to run a cron job inside a docker container?https://serverfault.com/questions/924779/docker-cron-not-working都没有成功。启动容器时,什么也没发生。

我做了一个简单的容器:

test/
    Dockerfile
    hello-cron

Dockerfile的内容:

FROM ubuntu:latest

RUN apt-get update && apt-get -y install cron

COPY hello-cron /etc/cron.d/hello-cron

RUN chmod 0644 /etc/cron.d/hello-cron

RUN crontab /etc/cron.d/hello-cron

RUN touch /var/log/cron.log

CMD cron && tail -f /var/log/cron.log

hello-cron

* * * * * root echo "Hello World" >> /var/log/cron.log 2>&1


我构建我的容器docker build -t cron-test .并运行docker run -t -i cron-test

没有控制台输出。我还尝试过在图像中输入bash来检查日志文件的内容以及hello-cron文件是否实际上已添加到crontab中:

docker exec -it <image-id> bash

cat /var/log/cron.log不会产生任何结果,而hello-cron文件位于/etc/cron.d/hello-cron上。

我知道这似乎是重复的,但是我见过的所有公认解决方案都不能解决这个问题。

1 个答案:

答案 0 :(得分:1)

为了cron,我建议使用alpine代替ubuntu。

FROM alpine:latest

RUN echo "* * * * * echo hello;exit 0" | crontab - 
CMD ["crond","-f"]

您可以探索更多选择

    -c  Crontab directory
    -u  User
    -l  List crontab
    -e  Edit crontab
    -r  Delete crontab
    FILE    Replace crontab by FILE ('-': stdin)

对于高山用户,也不需要像您在ubuntu基本映像中添加make container good for no thing那样CMD cron && tail -f /var/log/cron.log

当您使用CMD cron && tail -f /var/log/cron.log之类的CMD时,cron不再是容器的根进程,如果cron关闭,则容器将重新启动或停止。

如果您在前台运行容器,则可以使用CMD ["crond","-f"]在控制台中查看日志,也可以在后面查看日志。

奖金:

5.58MB

,您就可以使用cronjob的docker容器