news 2026/6/9 23:52:57

如何在 Docker 容器下运行 cronjob ?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在 Docker 容器下运行 cronjob ?

当您想要安排计划任务,可以使用内置在 macOS 和 Linux 中的常见工具,比如 cron,或者像 AWS Lambda 这样的特殊工具。Cron 不如 AWS Lambda 强大,但它在 Unix 系统的后台任务中工作得很好,特别是在使用容器的情况下。然而,对于 Docker 来说这有点复杂,因为不能简单地从终端开始新的 cron 作业,并期望它工作。

How to Dockerize a Cron Job

要在 Docker 容器中运行 cron 作业,您需要使用 cron 并在 Docker 容器的前台运行它。

下面是一个如何设置的例子:

Create Cron File

创建一个文件,其中包含要在 Docker 容器下运行的所有 cron 作业。

cat cron

我们的示例文件如下:

* * * * * echo "Current date is `date`" > /var/log/cron

Create Dockerfile

接下来,创建一个安装 cron 服务的Dockerfile,并将脚本复制到容器。

在这里,我们提供了 3 个 Dockerfile 示例,它们使用不同的操作系统。

Dockerfile with Alpine Linux

FROM alpine:3 # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Run the cron service in the foreground CMD [ "crond", "-l", "2", "-f" ]

Dockerfile with Apache and PHP

FROM php:8.0-apache # Install cron RUN apt update && \ apt -y install cron # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Start cron service RUN sed -i 's/^exec /service cron start\n\nexec /' /usr/local/bin/apache2-foreground

Dockerfile with Ubuntu Linux

FROM ubuntu:latest # Install cron deamon RUN apt update && apt install -y cron # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Run the cron service in the foreground CMD ["cron", "-f"]

Build and Run Container

当前目录中有两个文件,一个是 cron, 它包含了 cronjob。 一个是 Dockerfile, 它有 Docker 的构建指令。运行以下命令使用 Dockerfile 构建 Docker 镜像。

docker build -t my_cron .

镜像构建成功后,启动容器:

docker run -d my_cron

这将启动容器下的 cron 守护进程,它将执行 cron 文件中定义的所有计划作业。

Test Setup

我们已经链接了 cron 日志文件/var/log/cron/dev/stdout,Cron 服务生成的所有日志
可以使用docker logs命令查看。

首先,使用docker ps命令查找容器 id 或名称。

docker ps

然后检查 Docker 容器的日志文件。

docker logs container_id

在 cronjobs 中,我打印了当前日期并把它们写入日志中。

输出如上所示,这意味着 cron 作业在 Docker 容器下正常运行。

我的开源项目

  • course-tencent-cloud(酷瓜云课堂 - gitee仓库)
  • course-tencent-cloud(酷瓜云课堂 - github仓库)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 23:48:50

【无人机追踪】基于资源福利任务分配算法的无人机集群任务分配算法,完成目标攻击任务的基础上,无人机的资源利用率最大化 + 资源损耗的公平性最优附Matlab代码2

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华
网站建设 2026/6/9 22:09:01

java Date转换为string

在Java中将Date转换为String有多种方法,以下是常用的几种方式: 1. 使用 SimpleDateFormat(传统方式,Java 8之前) import java.text.SimpleDateFormat; import java.util.Date;// 创建Date对象 Date date new Date()…

作者头像 李华
网站建设 2026/6/9 22:10:16

探索SUMO、CARLA与自动驾驶联合仿真的奇妙世界

sumo/carla/自动驾驶联合仿真 安装 配置 /教程/开发/驾驶模拟/强化学习/轨迹预测/轨迹规划 在自动驾驶领域的研究与开发中,联合仿真起着至关重要的作用。SUMO和CARLA作为两款强大的仿真工具,它们的联合使用能够为自动驾驶技术的研究带来诸多便利&#x…

作者头像 李华
网站建设 2026/6/9 22:14:23

IP6163至为芯支持MPPT功能的太阳能电池板充电DC-DC芯片

英集芯IP6163是一款应用于太阳能电池板供电的锂电池/磷酸铁锂电池充电方案芯片。集成MCU的高效光伏降压MPPT DC-DC控制器。内置专用MPPT硬件与动态算法,峰值效率达99.9%,可快速锁定太阳能电池板的最大功率点。支持6-40V宽电压输入,兼容最多72…

作者头像 李华
网站建设 2026/6/7 3:05:14

西部生态建设新范式:科技赋能重塑发展底色

来源:中国经营报 记者:索寒雪党的二十届四中全会审议通过的《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》锚定“完善适应气候变化工作体系”“扎实推动西部大开发形成新格局”等战略目标,为西部开发指明了新方向。当前&am…

作者头像 李华
网站建设 2026/6/6 9:33:16

对中国市场:短期信心提振,

中长期加速 “国产替代 生态分化”(一)AI 算力与云服务市场:短期缓解 “算力焦虑”,长期倒逼自主可控短期利好:H200/B30A 落地有望补充高端算力缺口,缓解云

作者头像 李华