You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Compose时出现RabbitMQ IP连接错误的原因排查

问题:Docker Compose部署服务无法连接RabbitMQ网络,单独运行容器则正常

我尝试用Docker Compose部署项目服务,但通过Compose部署时无法连接到RabbitMQ网络;单独运行各容器时连接却能成功。

docker-compose.yml配置

version: '3'

services:
  notification:
    image: jyarac/notification_ms
    container_name: notification-microservice
    ports: 
      - "3000:3000"
    networks: 
      - rabbit_mq_nf
  gps:
    image: jyarac/gps
    container_name: gps-microservice
    ports: 
      - "3001:3001"
    networks: 
      - rabbit_mq_nf
  mq_ms:
    image: jyarac/mq_ms
    container_name: rabbit-microservice
    ports: 
      - "3005:3005"
    networks: 
      - rabbit_mq_nf
  rabbit_ms: 
    image: rabbitmq:3-management
    container_name: rabbitmq
    ports: 
      - "15672:15672"
      - "5672:5672"
    networks:
      - rabbit_mq_nf

networks:
  rabbit_mq_nf:
    driver: bridge

报错信息

Error: connect ECONNREFUSED 172.25.0.5:5672
2023-10-02 19:18:04     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
2023-10-02 19:18:04   errno: -111,
2023-10-02 19:18:04   code: 'ECONNREFUSED',
2023-10-02 19:18:04   syscall: 'connect',
2023-10-02 19:18:04   address: '172.25.0.5',
2023-10-02 19:18:04   port: 5672
2023-10-02 19:18:04 }

解决方案

  • 用服务名替代IP连接RabbitMQ
    Docker Compose会为每个服务分配固定的DNS别名,直接使用rabbit_ms(compose中RabbitMQ服务的名称)作为连接地址,不要用容器IP——IP在Compose重启后可能变化,而服务名始终有效。

  • 添加启动依赖与健康检查
    RabbitMQ启动需要时间,其他服务可能在它未就绪时就发起连接。修改compose配置,给RabbitMQ添加健康检查,让其他服务等待它完全启动后再运行:

    rabbit_ms: 
      image: rabbitmq:3-management
      container_name: rabbitmq
      ports: 
        - "15672:15672"
        - "5672:5672"
      networks:
        - rabbit_mq_nf
      healthcheck:
        test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
        interval: 5s
        timeout: 5s
        retries: 5
    
    notification:
      image: jyarac/notification_ms
      container_name: notification-microservice
      ports: 
        - "3000:3000"
      networks: 
        - rabbit_mq_nf
      depends_on:
        rabbit_ms:
          condition: service_healthy
    
    # gps、mq_ms服务同样添加上述depends_on配置
    
  • 检查RabbitMQ启动日志
    执行命令查看RabbitMQ容器日志,确认服务正常启动:

    docker logs rabbitmq
    

    正常启动会出现Server startup complete相关日志。

  • 验证应用连接配置
    检查微服务中的RabbitMQ连接参数:确保使用内部端口5672(不是宿主机映射端口),用户名密码与RabbitMQ默认的guest/guest一致,或者已在compose中配置了正确的环境变量。

内容的提问来源于stack exchange,提问作者Johhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:51:02