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

Не могу настроить Supervisor в Docker-контейнере, в чем может быть ошибка?

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

Итак, мой docker-compose.yml:
version: "3"

networks:
  nginx-php74-mysql8:

services:
  # nginx
  nginx-service:
    image: nginx:stable-alpine
    container_name: nginx-container
    ports:
      - "8080:80"
    volumes:
      - ./app:/var/www/project
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php74-service
      - mysql8-service
    networks:
      - nginx-php74-mysql8

  # php
  php74-service:
    build:
      context: .
      dockerfile: ./php/Dockerfile
    container_name: php74-container
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - ./app:/var/www/project
    networks:
      - nginx-php74-mysql8

  # mysql
  mysql8-service:
    image: mysql:8
    container_name: mysql8-container
    ports:
      - "4306:3306"
    volumes:
      - ./mysql:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always # always restart unless stopped manually
    environment:
        MYSQL_USER: root
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_PASSWORD: secret
    networks:
      - nginx-php74-mysql8

  rabbimq-service:
    image: rabbitmq:3-management
    container_name: rabbitmq-container
    ports:
      - "5671:5672"
      - "15671:15672"


Содержимое docker-файла:
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

# SUPERVISOR CONFIG
RUN apt-get install -y supervisor

RUN mkdir -p /var/log/supervisor

COPY ./supervisor /etc/supervisor

CMD ["/usr/bin/supervisord"]

RUN service supervisor restart
RUN supervisorctl reread
RUN supervisorctl update
RUN supervisorctl start messenger-consume:*
# END OF SUPERVISOR CONFIG

WORKDIR /var/www/project

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


Содержимое папки supervisor внутри проекта:
601ad888011d7596675229.png

Конфиг supervisord.conf:
; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf


На всякий случай конфиг для воркера:
[program:messenger-consume]
command=php /var/www/project/bin/console messenger:consume amqp_service --time-limit=3600
user=root
numprocs=2
startsecs=0
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d


И соответственно ошибка, где все ломается:
601ad8ecc50c5030623039.png

Если закомментировать вызовы supervisorctl, то php-контейнер будет все время находиться в состоянии перезапуска. Опытным путем выяснил, что дело в этой строке Dockerfile:
CMD ["/usr/bin/supervisord"]

Вроде ничего не забыл. Помогите пожалуйста.
  • Вопрос задан
  • 6722 просмотра
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Вы путаете докер-контейнер с виртуальной машиной.
Супервизор для запуска процессов в докере не нужен.
Стартуйте сам процесс - вам все правильно в комментах сказали.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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