首页 > 解决方案 > docker 容器中的 Symfony4 和 RabbitMQ

问题描述

我有多个 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 访问(根本不明白)

标签: symfonydockerrabbitmqdocker-compose

解决方案


尝试设置RABBITMQ_URL=amqp://user:pass@rabbit_mq:5672/vhost。rabbit_mq 是 RabbitMQ 服务的名称,也是你在 depends_on 中使用的名称,对于 MySql,你应该使用db它作为主机

入队存储的示例


推荐阅读