Как использовать прослушивание очереди Laravel в Docker

При работе на локальном хосте я использую:

php artisan queue:listen database

который слушает и действует как очередь. Это отлично работает, пока я не захочу докеризировать свое приложение Laravel. Я уже сделал это, поэтому не могу запустить команду, чтобы у контейнера был прослушиватель очереди.

Я читал, что могу сделать следующее:

docker exec -t (containername) php artisan queue:listen

Я хотел бы найти другой способ сделать это, потому что, если контейнер умирает и перезапускается, эта команда не будет выполнена, и я не могу просто смотреть, когда контейнер умирает, чтобы я мог сделать это вручную. Я хочу автоматический способ. каждый запускаемый контейнер должен запускать эту команду автоматически. Я пробовал в Dockerfile, но не имеет никакого эффекта.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
5 187
4

Ответы 4

Чтобы выполнить команду после запуска, добавьте в свой Dockerfile RUN cd /my/project/root && php artisan queue:listen

Кроме того, вы можете использовать судно для работы с Docker, он уже предварительно настроен для Laravel, так что вы можете просто сделать что-то вроде ./vessel artisan <cmd>

Я пробовал RUN php artisan queue:listen & с & и без RUN php artisan queue:listen &. В обоих случаях они не работают.

Daniel Cheung 14.01.2020 20:29

Если вам нужно иметь более одного работника, вы можете настроить его с помощью супервизора, как описано на странице очереди 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.

Другие вопросы по теме