当前位置: 首页 > 知识库问答 >
问题:

当我启动docker容器时,Cron没有运行

赫连淳
2023-03-14
    null
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
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# Empty space

虽然我不能让cron在那个特定的容器中工作,但我能够为cron创建一个独立的docker容器,并成功地使它自动运行。

至于cron容器的设置,我遵循了链接的文章,使用Docker-Julien Boulay运行了一个cron作业,并且能够使其工作。

共有1个答案

陆城
2023-03-14

我所做的是让CMD直接调用cron,如下所示:

CMD /usr/sbin/cron -f

在此之前,我将crontab添加到容器中,并使用以下命令将其分配为根crontab:

RUN crontab /root/mycrontab

您不需要对/etc/cron.d中的文件调用crontab命令,但您确实需要这些文件具有正确的语法。使用您的示例,而不是这样:

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

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 touch /var/log/cron.log

RUN ["dotnet", "restore"]

RUN ["dotnet", "build"]

EXPOSE 5000/tcp

CMD /usr/sbin/cron -f

克罗塔布

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

另一种选择是:

FROM microsoft/dotnet:latest
RUN apt-get update && apt-get install -y cron

COPY . /app

WORKDIR /app

ADD crontab /root/
RUN crontab /root/crontab
RUN touch /var/log/cron.log

RUN ["dotnet", "restore"]

RUN ["dotnet", "build"]

EXPOSE 5000/tcp

CMD /usr/sbin/cron -f
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
 类似资料:
  • 我一直试图在我的docker容器中运行cron作业,但当容器启动时,我似乎无法让cron服务运行。我可以远程进入运行容器并运行“cron”以使服务在没有问题的情况下启动。我在我的DockerFile中包含了这个,为什么命令没有被执行呢? Docker-compose.yml

  • 问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We

  • 我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始: 但MySQL服务不会自动启动,我必须手动运行(从容器内): 如何在运行docker容器时自动启动MySQL服务?

  • 问题内容: 我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样: 但是MySQL服务不会自动启动,我必须手动运行(从容器内部): 运行docker容器时如何自动启动MySQL服务? 问题答案: 首先,有一个 问题, 在您的: Docker映像不会保存正在运行的进程。因此,您的命令仅在阶段执行,并在构建完成后停止。相反,您需要使用或如下所示的命令在启动容器时指定命令:

  • 我正在尝试使用Docker Compose(在Windows上使用Docker Machine)来启动一组Docker容器。 成功运行。当我运行时,我会得到以下输出: 我确认了docker容器没有运行。如何启动集装箱?

  • 我正在尝试使用Docker Compose(在Windows上使用Docker Machine)来启动一组Docker容器。 My Docker-compose.yml: 已成功运行。运行时,得到以下输出: 我确实确认了docker容器没有运行。如何启动容器?