【发布时间】:2017-03-03 23:34:30
【问题描述】:
作为序言,我一直在参考这两篇文章寻求帮助:
我的目标是在我启动 docker 容器时自动启动一个 cron 作业。目前,它不会自动启动,但我可以手动进入我的容器并运行service cron start,它会启动作业,并且它可以正常工作。
所以问题是:如何让我的 cron 作业在我的容器启动时自动启动?
Dockerfile
FROM microsoft/dotnet:latest
RUN apt-get update && apt-get install -y cron
COPY . /app
WORKDIR /app
ADD crontab /etc/cron.d/crontab
RUN chmod 0600 /etc/cron.d/crontab
RUN crontab -u root /etc/cron.d/crontab
RUN touch /var/log/cron.log
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
CMD cron && tail -f /var/log/cron.log
CMD service cron start
crontab
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# Empty space
虽然我无法让 cron 在该特定容器中工作,但我能够创建一个专门用于 cron 的独立 docker 容器,并且成功地让它自动运行。
至于 cron 容器的设置,我按照链接的文章 Run a cron job with Docker - Julien Boulay 进行操作,并且能够使其正常工作。
【问题讨论】:
-
您是否需要在容器内运行 cron,或者您是否可以在主机上创建一个 cron 作业以在所需时间运行此容器以完成其工作?
-
@R0MANARMY 它需要在容器内运行。
-
你已经看过this question ?
-
@R0MANARMY 是的,这个问题基本上只是概述了我的第一个参考。
-
根据Docker docs,Dockerfile 中只能有一条 CMD 指令。我建议取出第二个。看起来您的 Dockerfile 与另一个答案中的差异只有几个。我会尝试一次更改那些,看看你是否可以让它运行。
标签: docker asp.net-core cron docker-compose