我试图安排一个任务在我的容器中运行,但是无法让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
上。
我知道这似乎是重复的,但是我见过的所有公认解决方案都不能解决这个问题。
答案 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容器