我有多个docker容器,它们在我的工作设置中提供不同的功能。一种用于网络,其中我的symfony项目作为卷安装。还有一个用于RabbitMQ的软件,应该由symfony项目的消息提供。我用docker-compose和ansible构建容器。
这是我的docker-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已启动并正在运行,我可以通过http://localhost:15672访问rabbitmq管理
现在,我尝试将消息推送到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容器时,我看到它的IPAdress是
"IPAddress": "172.18.0.3"
因此,当我将此IP放入symfony .env文件时,便能够将消息推送到队列中。但是,每次我重新运行docker容器时,此ip都会更改,并且我不想一直更改symfony配置。那么,管理此类方案的最佳实践是什么。
顺便说一句:可通过127.0.0.1:3306访问数据库容器(一点也不了解)
最佳答案
尝试设置RABBITMQ_URL=amqp://user:pass@rabbit_mq:5672/vhost
。 rabbit_mq是RabbitMQ服务的名称,也是您在depends_on中使用的服务的名称,对于MySql,您应该使用db
作为主机
An example(用于Enqueue存储库)
关于symfony - docker容器中的Symfony4和RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50169444/