【发布时间】:2017-10-26 16:20:00
【问题描述】:
我的 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
- Cron 没有运行,我必须在容器中 ssh 才能启动它。
-
当我手动启动它时,它适用于一些简单的事情,比如每分钟回显一个文本。但不适用于 php artisan schedule:run 命令。在我看到的日志中:
运行预定命令:'/usr/local/bin/php''artisan' 错误:插入 > '/dev/null' 2>&1
errors:insert 是我的任务名称,但网站上没有任何更新。
- 这很奇怪,因为当我手动运行 php artisan schedule:run 命令时,它可以在网站上运行。
所以我的问题是:如何让 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).
【问题讨论】:
-
你必须手动启动它,因为
cron必须在运行时执行,因此它应该在ENTRYPOINT而不是RUN。但是,对于第二部分,我遇到了相同的情况,但是退出代码为 0,您设法解决了吗? -
我用另一种方式解决了它。我使用一个容器与主管一起完成所有工作。