让cron在php上运行:7-fpm图像

joh*_*ohn 8 php docker

我是码头工人的新手.我使用php:7-fpm图像设置了dockerfile.除了用于运行我的网站的这个图像,我想添加一个cron,以便能够执行常规任务.

我创建了一个cron里,把它放在正确的文件夹,并运行docker exec -ti myimage_php_1 /bin/bashcron或者,如果我tail的日志文件,一切工作正常.但是在创建容器时我无法使用它,我不想显然手动启动cron.

根据我的理解,我需要在启动时使用CMDENTRYPOINT运行cron命令,但每次我这样做都会因为我覆盖CMD/ENTRYPOINT原始php:7-fpm图像的必要功能而停止我的网站工作.有没有办法触发cron命令并继续像以前一样使用php:7-fpm CMD/ENTRYPOINTs?

Rob*_*ert 11

方法#1

创建自定义entrypoint.sh,如下所示:

#!/bin/bash

cron -f &
docker-php-entrypoint php-fpm
Run Code Online (Sandbox Code Playgroud)

注意&,这意味着"发送到后台".

然后:

COPY ./entrypoint.sh /
ENTRYPOINT /entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

方法#2

但是,有一种更复杂的安装方式supervisor,请参阅docs(docker中使用的恶魔管理器):

在Dockerfile中:

RUN apt-get update && apt-get install supervisor
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
...
CMD ["/usr/bin/supervisord"]
Run Code Online (Sandbox Code Playgroud)

supervisord.conf

[program:cron]
command = cron -f

[program:php]
command = docker-php-entrypoint php-fpm
Run Code Online (Sandbox Code Playgroud)

一些故障排除命令

docker exec <container-id> supervisorctl status
docker exec <container-id> supervisorctl tail -f php
docker exec <container-id> supervisorctl tail -f cron
docker exec <container-id> supervisorctl restart php
Run Code Online (Sandbox Code Playgroud)

  • @Robert 你能说一下 `docker-php-entrypoint` 是什么意思吗?目前尚不清楚这是什么以及为什么会出现在那里。 (3认同)
  • 我不确定这是否对任何人都有效(我必须假设它确实有效),但是对于最近的 `php:7.2-apache` 图像,我必须使用 `CMD ["/usr/bin/supervisord", "-n" , "-c", "/etc/supervisor/supervisord.conf"]` 。否则它无法找到配置,并且它将尝试分叉。 (2认同)