我有一个容器用于我的laravel应用程序,php:7.0.4-fpm作为基本图像。
这是我的dockerfile:
FROM php:7.0.4-fpm
RUN apt-get update && apt-get install -y cron nano libmcrypt-dev \
mysql-client libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql
COPY . /var/www
ADD crontab /etc/cron.d/laravel-cron
RUN chmod 0644 /etc/cron.d/laravel-cron
RUN touch /var/log/cron.log
RUN /usr/bin/crontab /etc/cron.d/laravel-cron
RUN cron
当我手动启动时,它适用于简单的事情,比如每分钟回复文本。但不适用于 php artisan schedule:run 命令。在日志中我看到:
运行预定命令:'/ usr / local / bin / php''artisan' 错误:插入> '/ dev / null'2>& 1
错误:插入是我的任务的名称,但网站上没有任何更新。
所以我的问题是:如何让cron在docker容器上工作以执行php artisan schedule:run命令?最好用dockerfile编写,而不是通过ssh手动编写。
我也从容器中收到一条奇怪的消息:
ALERT: oops, unknown child (5094) exited with code 1.
Please open a bug report (https://bugs.php.net).
答案 0 :(得分:0)
另一种解决方案是与主管一起运行 php artisan schedule:run
。就我而言,我在 [项目根目录]/.docker/php/workers 中有一个 schedule-run.conf:
[program:schedule-run]
process_name=%(program_name)s_%(process_num)02d
command=/bin/bash -c "while [ true ]; do (php /var/www/html/artisan
schedule:run --verbose --no-interaction &); sleep 60; done"
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/schedule.log
stopwaitsecs=60
apt-get install -y cron
替换为 apt-get install -y supervisor
ADD .docker/php/workers /etc/supervisor/conf.d
和 CMD ["/usr/bin/supervisord"]
添加到您的 Dockerfile。