news 2026/8/28 20:12:20

如何在 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/8/21 4:50:22

SimpleDateFormat 为什么线程不安全

SimpleDateFormat是线程不安全的,主要原因如下: 1. 内部状态可变性 // SimpleDateFormat 内部维护了可变状态 private StringBuffer format(Date date, StringBuffer toAppendTo, FieldDelegate delegate) {// 会修改内部的 Calendar 对象calendar.set…

作者头像 李华
网站建设 2026/8/23 0:18:51

【Rust开发】Rust基础语法详细解析,助力你快速通关Rust

Rust基础语法解析变量与可变性Rust中变量默认不可变,使用let声明。可变变量需添加mut关键字:let x 5; // 不可变 let mut y 10; // 可变 y 15; // 允许修改常量使用const声明,必须标注类型:const MAX_POINTS: …

作者头像 李华
网站建设 2026/8/21 22:32:07

2026网络安全这趟车_你还敢上吗?

网络安全真相大揭秘:2026年入坑指南,收藏级内容,小白程序员必读 网络安全行业现状严峻:求职竞争激烈,企业需要的是真正理解攻防逻辑的人才而非工具使用者;安全部门常被视为成本中心,在公司预算…

作者头像 李华
网站建设 2026/8/22 7:00:57

无线控制系统如何降低轨道小车部署与维护成本?

在汽车制造、仓储物流、冶金化工等场景中,轨道小车是物料转运的“动脉”,其控制精度与运行效率直接影响生产节拍与成本。然而,传统有线控制模式面临布线复杂、维护成本高、移动受限等痛点,拖链电缆频繁弯折导致断裂、信号衰减&…

作者头像 李华
网站建设 2026/8/28 9:42:22

探索锂电池生产设备的自动化控制:从硬件到软件实现

锂电池二封机 欧姆龙NJ/NX程序NX1P2-1040DT, 全自动锂电池Degas机 主站NX1P2-1040DT,ID6142.OD6121等输入输出IO模块搭配FX5U四从站以太网通信控制实例威纶通触摸屏。 整机采用EtherCAT总线网络节点控制,松下A6,雷赛DM3E步进总线控…

作者头像 李华
网站建设 2026/8/21 22:32:12

基于单片机的红外检测及语音响应系统:车站温度检测好帮手

基于单片机的红外检测及语音响应系统 本设计是基于单片机的红外检测及语音响应系统,主要是为了应用于车站出入站口的温度测量。 选择STC89C52单片机作为中间的核心处理器、搭配DS18B20温度检测电路、语音播报电路、LCD显示电路。 设计的目的是:能够对密集…

作者头像 李华