有时我们需要在docker的php容器里开启定时任务,又不想每次都手动执行 service cron start
, 我们可以把cron设置为运行容器时自动启用。
在 Dockerfile
同级目录新建一个脚本 entrypoint.sh
内容为
1
2
3
|
#!/bin/bash
/etc/init.d/cron start
exec "$@"
|
Dockerfile
内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
FROM php:7.4-fpm
Run apt-get update && apt-get install -y \
libfreetype6-dev libjpeg62-turbo-dev libpng-dev vim \
cron libzip-dev zip \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
&& docker-php-ext-install gd pdo_mysql mysqli zip exif \
&& docker-php-ext-configure zip \
&& docker-php-ext-enable mysqli exif \
&& mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
&& mkdir -p /usr/src/php/ext/redis \
&& curl -L https://github.com/phpredis/phpredis/archive/5.3.0.tar.gz | tar xz -C /usr/src/php/ext/redis --strip 1 \
&& echo "redis" >> /usr/src/php-available-exts \
&& docker-php-ext-install redis
COPY ./entrypoint.sh /
RUN chmod -R 755 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
|
说明
ENTRYPOINT
相当于执行启动时的命令
最后要加上 CMD ["php-fpm"]