在 Docker 中使用 Laravel 的任务调度

本文详细介绍了如何在Docker环境下配置Cron定时任务,包括安装Cron、创建和映射Cron配置文件、编写运行Cron的入口脚本,并通过一个具体的Dockerfile示例展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 安装 cron

在 Dockerfile 中添加安装 cron 的命令

RUN apt-get install cron -y

2. bash 文件支持

在 Dockerfile 所在的目录新建 crontab 文件,没有 .sh 文件后缀,内容为

#!/usr/bin/env bash
* * * * * /usr/local/bin/php /var/www/html/artisan schedule:run >> /dev/null 2>&1

/usr/local/bin/php 是 docker 中的 php 所在路径,不知道的可以进到 docker 容器中利用 which php 命令获取到.

/var/www/html 是项目路径

在 Dockerfile 中将 crontab 文件映射到容器中.并赋予读写权限

COPY ./crontab /var/spool/cron/crontabs/root
RUN chmod 0644 /var/spool/cron/crontabs/root
RUN crontab /var/spool/cron/crontabs/root

在 Dockerfile 文件所在的目录中新建 entrypoint bash 文件,添加运行 cron 的脚本

#!/bin/bash

set -e

cron

exec "$@"

由于项目有其他的需要,所以 bash 脚本可能大同小异

利用 ENTRYPOINT 命令添加 entrypoint.bash 脚本到 Dockerfile 中.

我的完整的 Dockerfile 文件如下

FROM php:7.1.8-apache

ENV TZ=Asia/Shanghai
ENV APACHE_LOG_DIR /var/log/apache2_log
COPY sources.list /etc/apt/sources.list

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
        libpq-dev \
        g++ \
        libicu-dev \
        libxml2-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mbstring \
    && docker-php-ext-install zip \
    && docker-php-ext-install pdo pdo_mysql mysqli opcache pcntl \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && a2enmod rewrite \
    && cron \
    && vim
RUN a2enmod ssl

### 队列
COPY ./crontab /var/spool/cron/crontabs/root
RUN chmod 0644 /var/spool/cron/crontabs/root
RUN crontab /var/spool/cron/crontabs/root

COPY ./entrypoint.sh /usr/local/bin/
CMD ["entrypoint.sh"]

3. 重新 build 容器

 

进入容器观察 cron 是否成功

 

参考

https://laravel-china.org/articles/7022/using-laravel-schedule-in-docker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值