У меня есть несколько док-контейнеров, которые предоставляют разные вещи в моей рабочей настройке. Один для веб, где мой проект Symfony монтируется как том. И еще один для RabbitMQ, который должен быть представлен сообщениями из проекта Symfony. Я создаю свой контейнер с помощью docker-compose и ansible.
Это мой докер-compose.yml
version: '2'
services:
web:
depends_on:
- db
- rabbit_mq
build: ./container/web
container_name: web
ports:
- "80:80"
volumes:
- [PATH]:/var/www/html/project
db:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: "USER"
MYSQL_DATABASE: "PASS"
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: always
rabbit_mq:
image: "rabbitmq:3-management"
hostname: "rabbitmq-localhost"
container_name: rabbitmq
ports:
- "15672:15672"
- "5672:5672"
volumes:
- rabbit:/var/lib/rabbitmq
- "./container/rabbitmq/config/enabled_plugins:/etc/rabbitmq/enabled_plugins"
- "./container/rabbitmq/config/rabbitmq.config:/etc/rabbitmq/rabbitmq.config"
- "./container/rabbitmq/config/definitions.json:/etc/rabbitmq/definitions.json"
command: bash -c "sleep 10; rabbitmq-server;"
volumes:
mysql_data:
rabbit:
driver: local
Все работает хорошо, Symfony и RabbitMQ запущены и работают, и я могу получить доступ к управлению rabbitmq через http://localhost:15672
Теперь я пытаюсь отправить сообщение в мою очередь RabbitMQ и получаю сообщение об ошибке:
stream_socket_client(): unable to connect to tcp://127.0.0.1:5672 (Connection refused)
Вот моя конфигурация symfony .env
RABBITMQ_URL=amqp://user:pass@127.0.0.1:5672/vhost
Когда я проверяю контейнер rabbitmq, я вижу, что его IP-адрес равен
"IPAddress": "172.18.0.3"
Поэтому, когда я помещаю этот IP-адрес в файл symfony .env, я могу отправить сообщения в очередь. Но этот ip меняется каждый раз, когда я перезапускаю контейнер докера, и я не хочу все время менять конфигурацию Symfony. Так что лучше всего управлять такими сценариями.
Между прочим: контейнер базы данных доступен через 127.0.0.1:3306 (совсем не понимаю)