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

多Docker Compose文件容器通信异常求助:连接被拒绝

跨Docker Compose容器连接拒绝问题排查方案

问题概述

两个独立Docker Compose项目中的b-applicationgateway与b-middleware容器已加入同一外部网络int-net,但前者向后者发送HTTP请求时出现Connection refused错误,内部网络通信正常。


排查与解决步骤

1. 确认服务监听端口的绑定范围

进入b-middleware容器,执行以下命令检查服务监听地址:

docker exec -it asynccontroller-b-middleware-1 ss -tulpn

确保服务监听的是0.0.0.0:9096而非127.0.0.1:9096。如果是Spring Boot应用,需在配置文件中设置server.address=0.0.0.0,否则仅允许容器内部访问端口。

2. 使用Docker服务名而非IP通信

Docker网络支持通过服务名直接解析通信,无需依赖固定IP。修改b-applicationgateway的请求地址为:

http://b-middleware:9096

避免使用日志中显示的172.27.0.2这类动态IP,容器重启后IP可能变化。

3. 验证网络连通性

进入b-applicationgateway容器,执行以下命令验证连通性:

  • 解析服务名:
    docker exec -it webplatform-b-applicationgateway-1 ping b-middleware
    
  • 测试端口开放:
    docker exec -it webplatform-b-applicationgateway-1 nc -zv b-middleware 9096
    

如果ping通但端口无法访问,说明服务未正常监听端口。

4. 处理服务启动就绪问题

depends_on仅保证容器启动顺序,不保证服务完全就绪:

  • 给b-middleware添加健康检查(修改asyncController的docker-compose.yaml):
    services:
      b-middleware:
        # 原有配置...
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:9096/actuator/health"] # 替换为你的健康检查端点
          interval: 10s
          timeout: 5s
          retries: 5
    
  • 在b-applicationgateway中添加请求重试逻辑(比如Spring WebClient的重试过滤器),避免在服务未就绪时发起请求。

5. 检查外部网络配置

再次确认网络成员与配置:

docker network inspect int-net

确保两个容器的IPv4Address属于同一子网,且Aliases字段包含各自的服务名(b-applicationgateway、b-middleware)。

6. 查看容器启动日志

检查b-middleware的启动日志,确认服务是否正常初始化:

docker logs asynccontroller-b-middleware-1

排查是否有端口绑定失败、服务启动异常等报错信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:54:56