gpt4 book ai didi

docker - Cron 作业不会在 Docker 容器内运行

转载 作者:行者123 更新时间:2023-12-02 19:02:31 27 4
gpt4 key购买 nike

我正在尝试安排一个任务在我的容器内运行,但无法让 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 .

我知道这似乎是重复的,但我所看到的接受的解决方案都没有解决这个问题。

最佳答案

为了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)

使用 alpine 也不需要 make container good for no thingCMD cron && tail -f /var/log/cron.log就像您添加 ubuntu 基本图像一样。

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

使用 CMD ["crond","-f"]如果您在前台运行容器,您将能够在控制台中看到日志,或者您可以稍后检查日志。

奖金:

您只需 即可获得用于 cronjob 的 docker 容器5.58MB

关于docker - Cron 作业不会在 Docker 容器内运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57888081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com