Docker+Laravel队列:工作

我试图在容器启动并运行后运行以下命令

php工匠队列:work-n-q&

存在“&”是因为守护程序选项已被弃用,后来从Laravel中删除

然而,这完全破坏了我的容器启动

CMD[“php”、“artisan”、“队列:工作”、“-n”、“-q”、“&”]

我应该如何以Docker的方式来做这件事

编辑:

使用docker compose,我将此行添加到docker-compose.yml文件中

命令:bash-c'php artisan队列:work-n-q;'

容器已启动,但未提供任何请求:S

使用此选项:

命令:bash-c'php artisan队列:work-n-q&;呼应“奔跑”;tail-f/dev/null'

启动后容器停止运行

最终解决方案

所以最后我想,也许负责交付应用程序的服务器不应该是运行队列的服务器

因此,我启动了同一docker映像的另一个实例,其唯一目的是运行artisan队列:工作

queue:work命令在前台运行,因此您应该以这种方式运行它,以便容器不会立即退出

由于Laravel中的应用程序代码与作为web应用程序、队列或调度程序运行容器的代码相同,因此我构建了一个可以在这些上下文中使用的映像。我使用带有环境变量的bash start脚本来定义容器角色,这是我为队列工作器容器运行的:

#/bin/bash
#默认为应用服务器
role=${CONTAINER\u role:-app}
如果[“$role”=“队列”];然后
#运行队列
php artisan队列:工作--详细--尝试=3--超时=90
elif[“$role”=“app”];然后
#运行web应用程序
/usr/bin/caddy--agree=true--conf=/etc/Caddyfile
elif[“$role”=“调度程序”];然后
而[对]
做
php artisan计划:运行--详细--无交互&
睡60
完成
其他的
echo“无法匹配容器角色…”
出口1
fi

还要注意无限while循环和sleep组合,以保持调度器角色运行,并在后台运行schedule:run命令,以防调度器运行重叠(因为无论最后一个是否完成,它们都需要每分钟运行一次)

发表评论