laravel - Docker + Laravel 队列 :work

标签 laravel docker lumen

我正在尝试在容器启动并运行后运行以下命令。

php artisan queue:work -n -q &

"&"之所以存在是因为守护程序选项已被弃用,后来从 Laravel 中删除。

但是,这完全破坏了我的容器启动。
CMD ["php", "artisan", "queue:work", "-n", "-q", "&"]

我应该如何以 Docker 的方式做到这一点?

编辑:

使用 docker-compose 我将此行添加到我的 docker-compose.yml 文件中
command: bash -c 'php artisan queue:work -n -q;'

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

使用这个:
command: bash -c 'php artisan queue:work -n -q &; echo "runs"; tail -f /dev/null'

容器启动后停止

最终解决方案

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

因此,我启动了同一个 docker 镜像的另一个实例,其唯一目的是运行 artisan queue:work。

最佳答案

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

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

#!/bin/bash

# Defaults to an app server
role=${CONTAINER_ROLE:-app}

if [ "$role" = "queue" ]; then
    # Run queue
    php artisan queue:work --verbose --tries=3 --timeout=90
elif [ "$role" = "app" ]; then
    # Run the web application
    /usr/bin/caddy --agree=true --conf=/etc/Caddyfile
elif [ "$role" = "scheduler" ]; then
    while [ true ]
    do
      php artisan schedule:run --verbose --no-interaction &
      sleep 60
    done
else
    echo "Could not match the container role...."
    exit 1
fi

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

关于laravel - Docker + Laravel 队列 :work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884802/

相关文章:

redis - 使用 Ansible 和 Docker 部署/运行 Redis 服务

php - 在 Repository 类中注入(inject) DatabaseManager

php - 流明路由错误 handleDispatcherResponse(array ('0' ))

php - 如何根据另外两个表的计算从一个表中检索数据?

mysql - Laravel Docker 容器未连接到本地 mysql

php - 无法启动服务php-fpm:无效的 header 字段值“oci运行时错误:container_linux.go:247:正在启动容器

docker - 除了 root 之外,您如何运行 Openshift Docker 容器?

laravel - 当使用 --tries=0 时,PHP 错误将作业推送到延迟队列中

laravel - 请求过时版本的 PayPal。与 laravel 集成

php - 如何检查当前日期在 laravel 5.4 中的两个日期之间