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

让cron在php:7-fpm映像上运行,php,docker,Php,Docker,我已经使用php:7-fpm映像设置了一个dockerfile。除了这个用于运行我的站点的映像之外,我还想添加一个cron来执行常规任务 我已经创建了一个cron,将它放在正确的文件夹中,然后运行docker exec-ti myimage\u php\u 1/bin/bash然后cron或者如果我tail日志文件都可以正常工作。但是当创建容器时,我不能让它工作,我不想手动启动cron 据我所知,我需要在启动时使用CMD或ENTRYPOINT来运行cron命令,但每次这样做时,由于我覆盖了原始p

我已经使用php:7-fpm映像设置了一个dockerfile。除了这个用于运行我的站点的映像之外,我还想添加一个cron来执行常规任务

我已经创建了一个cron,将它放在正确的文件夹中,然后运行
docker exec-ti myimage\u php\u 1/bin/bash
然后
cron
或者如果我
tail
日志文件都可以正常工作。但是当创建容器时,我不能让它工作,我不想手动启动cron

据我所知,我需要在启动时使用
CMD
ENTRYPOINT
来运行
cron
命令,但每次这样做时,由于我覆盖了原始php:7-fpm映像所需的
CMD/ENTRYPOINT
功能,网站都会停止工作

有没有办法触发cron命令并继续使用php:7-fpm
CMD/ENTRYPOINT
s

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

#!/bin/bash

cron -f &
docker-php-entrypoint php-fpm
注意
,它的意思是“发送到后台”

然后:


方法#2

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

在Dockerfile中:

RUN apt-get update && apt-get install supervisor
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
...
CMD ["/usr/bin/supervisord"]
supervisord.conf

[program:cron]
command = cron -f

[program:php]
command = docker-php-entrypoint php-fpm
一些疑难解答命令:

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
docker exec supervisorctl状态
docker exec supervisorctl tail-f php
docker exec supervisorctl tail-f cron
docker exec supervisorctl重新启动php

谢谢,这似乎已经解决了我原来的问题。不过,我还有第二个问题,当我在entrypoint.sh文件中运行它时,我无法再使用
user nginx
更改用户,而且
su-nginx
似乎什么都不做。我需要cron正在运行,但是用户必须是
nginx
。如果我在Dockerfile中使用了
USER nginx
,我就没有权限在entrypoint.sh中启动cron。有什么办法可以解决这个问题吗?将你的crontab信息放在/etc/crontab中,并在命令之前添加用户名进行编辑:@Robert你能说说docker php entrypoint
的意思吗?现在还不清楚这是什么以及它为什么会出现。这是vanillia image将用来启动的脚本:我不确定这是否适用于任何人(我必须假设它适用),但对于最近的
php:7.2-apache
图像,我不得不使用
CMD[“/usr/bin/supervisords”、“-n”、“-c”、“/etc/supervisorder/supervisords.conf”
。否则它找不到配置,它将尝试分叉。
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