Заранее оговорюсь, что я только начал работать с докером и многого не знаю. Задача у меня следующая: есть проект на Симфони, работа с ним идет через докер. Мне нужно настроить в контейнере работу асинхронного воркера на 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 внутри проекта:
Конфиг 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
И соответственно ошибка, где все ломается:
Если закомментировать вызовы supervisorctl, то php-контейнер будет все время находиться в состоянии перезапуска. Опытным путем выяснил, что дело в этой строке Dockerfile:
CMD ["/usr/bin/supervisord"]
Вроде ничего не забыл. Помогите пожалуйста.