laravel的docker容器上的cron不工作
我有一个容器,用于我的laravel应用程序,php:7.0.4-fpm作为基本映像 这是我的dockerfile:laravel的docker容器上的cron不工作,laravel,docker,cron,Laravel,Docker,Cron,我有一个容器,用于我的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
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
ALERT: oops, unknown child (5094) exited with code 1.
Please open a bug report (https://bugs.php.net).
虽然这是一个迟来的答复,但我认为我的解决方案可能会帮助其他人,因为我以前遇到过这个问题 我创建了单独的docker容器作为Laravel docker Cron,用于执行Laravel计划 这是我的Dockerfile代码
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
ENV DEBIAN_FRONTEND=noninteractive
# install base packages
RUN apt-get update && apt-get -y install cron\
apt-utils \
curl \
# Install php 7.2
php7.2 \
php7.2-cli \
php7.2-json \
php7.2-curl \
php7.2-fpm \
php7.2-dev \
php7.2-gd \
php7.2-ldap \
php7.2-mbstring \
php7.2-bcmath \
php7.2-mysql \
php7.2-soap \
php7.2-sqlite3 \
php7.2-xml \
php7.2-zip \
php7.2-intl \
libldap2-dev \
libaio1 \
libaio-dev
# Install tools
RUN apt-get -y install openssl \
nano \
ghostscript \
iputils-ping \
locales \
rlwrap \
php-pear \
make \
unzip \
zip \
tar \
ca-certificates \
&& apt-get clean &&\
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Set locales
RUN locale-gen en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 km_KH sv_SE.UTF-8 fi_FI.UTF-8
# Copy crontab file to the cron.d directory
COPY crontab /etc/cron.d/crontab
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/crontab
# Apply cron job
RUN crontab /etc/cron.d/crontab
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
crontab文件将包含
* * * * * cd /var/www && php artisan schedule:run >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
下面是此代码的repo另一种解决方案可以是通过运行
php artisan schedule:run
和supervisor。在我的例子中,我在[project root]/.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主管
- 将
和add.docker/php/workers/etc/supervisor/conf.d
添加到Dockerfile中CMD[“/usr/bin/supervisord”]
cron
必须在运行时执行,因此它应该位于入口点
而不是运行
。然而,对于第二部分,我也有同样的经历,但是对于退出代码0,您是否设法解决了它?我用另一种方法解决了它。我用一个容器和主管做所有事情。