Задать вопрос
Bandicoot
@Bandicoot
Вась-программист

Как запустить фоновый процесс (воркер) внутри докер-контейнера, чтобы надежно работал и перезапускался при необходимости?

Всем привет! Делаю воркер на Симфони, вся работа идет через докер. Соответственно воркер запускается в отдельном контейнере. В качестве транспорта используется RabbitMQ. Сейчас есть проблема: чтобы воркер нормально работал, я захожу в консоль работающего контейнера и запускаю команду вручную:

php bin/console messenger:consume amqp_image_caching -vv


Все прекрасно работает. Сообщения доходят из основного контейнера через контейнер RabbitMQ в контейнер воркера. Но есть одно но - это решение так себе и нужно запускать эту команду автоматически сразу после запуска контейнера воркера. И тут я столкнулся с проблемой. Если дописать эту строку в конец Dockerfile:

CMD ["php bin/console messenger:consume amqp_image_caching -vv"]


То контейнер воркера все время будет в состоянии перезапуска (Restarting) и сам воркер работать не будет (я проверял, до него не доходят сообщения из очереди).

Полный Dockerfile для воркер-контейнера:

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
    && docker-php-ext-install intl opcache pdo pdo_mysql \
    && pecl install apcu \
    && docker-php-ext-enable apcu \
    && docker-php-ext-configure zip \
    && docker-php-ext-install zip

# AMQP
RUN docker-php-ext-install sockets
RUN apt-get install -y librabbitmq-dev \
    && pecl install amqp \
    && docker-php-ext-enable amqp

RUN apt-get install -y inetutils-ping

# GD
RUN apt-get update -y && apt-get install -y libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev \
    libfreetype6-dev
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    --with-webp
RUN docker-php-ext-install gd

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN curl -sS https://get.symfony.com/cli/installer | bash

RUN mv /root/.symfony/bin/symfony /usr/local/bin/symfony

WORKDIR /var/www/project

CMD ["php bin/console messenger:consume amqp_image_caching -vv"]


Воркер запускается вместе с другими контейнерами через docker-compose если что, они работают нормально. Проблема именно с запуском фоновой команды в отдельном контейнере воркера. Подскажите пожалуйста, как правильно ее запустить.
  • Вопрос задан
  • 425 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Попробуйте указать полный путь к бинарнику php и отдельно давать параметры:
CMD ["/usr/local/bin/php", "bin/console", "messenger:consume", "amqp_image_caching", "-vv"]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы