При работе на локальном хосте я использую:
php artisan queue:listen database
который слушает и действует как очередь. Это отлично работает, пока я не захочу докеризировать свое приложение Laravel. Я уже сделал это, поэтому не могу запустить команду, чтобы у контейнера был прослушиватель очереди.
Я читал, что могу сделать следующее:
docker exec -t (containername) php artisan queue:listen
Я хотел бы найти другой способ сделать это, потому что, если контейнер умирает и перезапускается, эта команда не будет выполнена, и я не могу просто смотреть, когда контейнер умирает, чтобы я мог сделать это вручную. Я хочу автоматический способ. каждый запускаемый контейнер должен запускать эту команду автоматически. Я пробовал в Dockerfile, но не имеет никакого эффекта.






Чтобы выполнить команду после запуска, добавьте в свой Dockerfile RUN cd /my/project/root && php artisan queue:listen
Кроме того, вы можете использовать судно для работы с Docker, он уже предварительно настроен для Laravel, так что вы можете просто сделать что-то вроде ./vessel artisan <cmd>
Если вам нужно иметь более одного работника, вы можете настроить его с помощью супервизора, как описано на странице очереди Laravel https://laravel.com/docs/5.7/queues#supervisor-configuration.
Создайте новую службу, как показано ниже, и запустите ее на том же образе.
Вот мой файл docker-composer.yml. Он также поможет запускать очереди в средах АМС Фаргейт.
version: "3.4"
services:
www:
build:
context: .
dockerfile: ./docker/Dockerfile
image: php-laravel:latest
ports:
- "8008:80"
volumes:
- ./src:/var/www/html/
networks:
- default
php-queue:
restart: always
image: php-laravel:latest
command: php artisan queue:work
volumes:
- ./src:/var/www/html/
volumes:
default:
Не уверен, что это правильный путь. Но я делаю это в течение длительного времени, и это работает хорошо для меня.
Перейдите в папку проекта.
Беги php artisan queue:listen
Перед запуском этой команды добавьте текущего пользователя в группу www-data.
Я пробовал
RUN php artisan queue:listen &с&и безRUN php artisan queue:listen &. В обоих случаях они не работают.