我有两个laravel项目。每个项目都在自己的docker容器中:
第一个项目:
potatoes:
build:
context: ./potatoes
dockerfile: Dockerfile
args:
environment: local
ports:
- '5000:80'
depends_on:
- redis
- potatoesdb
- elasticsearch
volumes:
- ./potatoes:/var/www/html/app
第二个项目:
beanstalk:
build:
context: ./beanstalk
dockerfile: Dockerfile
args:
environment: local
ports:
- '5004:80'
depends_on:
- redis
- beanstalkdb
volumes:
- ./beanstalk:/var/www/html/app
links:
- potatoes
每一个都有自己的docker配置和监管:
[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
我需要做以下事情,但我不知道是否有可能做到:
在我的第一个项目中,我创建了一个作业:TestJobQueue。当此作业完成时,必须运行另一个项目中的作业,该作业也称为TestJobQueue。
我不知道如何为第一个和第二个项目作业调用相同的队列。我不知道这是Docker的问题,还是工人的问题,或者这是不可能的。
有什么想法吗?
不可能按照您介绍的方式来做,因为每个项目都在不同的Docker容器中运行,所以它们的队列不可能相同。
这是因为当您在Dockerfile中执行CMD ["/usr/bin/supervisord"]
时,每个项目都有自己的supervisord
,每个项目依赖于自己的Docker容器。
我认为你可以用docker compose来解决这个问题,这是使用不同docker容器的最佳方式。甚至可以通过docker compose创建一个supervisord容器,但我对此并不熟悉。