繁体   English   中英

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

[英]Cron job won't run inside Docker container

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

我都遵循了如何在Docker容器中运行cron作业? 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

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

我建议为了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)

同样对于阿尔卑斯山脉,您不需要使用CMD cron && tail -f /var/log/cron.log make container good for no thing CMD cron && tail -f /var/log/cron.log就像您添加ubuntu基本映像一样。

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

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

奖金:

您仅用5.58MB就可以为cronjob使用docker容器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM