我需要在Docker中添加一个worker。我使用Laravel 5.7和docker-compose版本3。
docker-compose文件为:
potatoes:
build:
context: ./potatoes
dockerfile: Dockerfile
args:
environment: local
ports:
- '5000:80'
links:
- redis
- potatoesdb
- elasticsearch
volumes:
- ./potatoes:/var/www/html/app
Dockerfile是:
FROM my-company-laravel:latest
#Copiamos las configuraciones de nginx,el host y supervisor
ADD docker/nginx.conf /etc/nginx/nginx.conf
ADD docker/virtualhost.conf /etc/nginx/conf.d/default.conf
ADD docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ARG environment
RUN apt-get install -y libpng-dev
RUN docker-php-ext-install gd
RUN docker-php-ext-install zip
#Copiamos el projecto con los modulos de node y los assets compilados
COPY --chown=root:www-data ./ /var/www/html/app
COPY --chown=root:www-data ./.env.${environment:-local} /var/www/html/app/.env
#Aplicamos los permisos que corresponden
RUN chmod -R g+w /var/www/html/app/storage
RUN chmod -R g+w /var/www/html/app/bootstrap
#Copiamos composer
COPY --from=composer /usr/bin/composer /usr/bin/composer
##Download composer packages
WORKDIR /var/www/html/app
RUN composer install
RUN chmod -R g+w /var/www/html/app/vendor
RUN php artisan key:generate
EXPOSE 80
CMD ["/usr/bin/supervisord"]
在Laravel项目内部,我创建了一个docker文件夹,其中包括:
supervisord文件:
[supervisord]
nodaemon = true
logfile = /tmp/supervisord.log
logfile_maxbytes = 0
[program:php-fpm]
command=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /usr/local/etc/php-fpm.conf
numprocs=1
autostart=true
autorestart=false
[program:nginx]
command =/usr/sbin/nginx -g "daemon off;"
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=3
redirect_stderr=true
stdout_logfile=/tmp/worker.log
还有另外两个文件,但是与我无关。 (nginx.conf和virtualhot.conf)
应用程序运行正常,但是工作程序无法正常工作,我必须运行php artisan queue:work ...
此图显示文件/tmp/supervisord.log: