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

Docker Compose部署SpringBoot+Feign微服务报Connection refused异常

问题根因

出现feign.RetryableException: Connection refused报错的核心原因是Docker容器的网络隔离机制:

  • 每个Docker容器拥有独立的网络命名空间,容器内部的localhost仅指向当前容器自身,既不指向宿主机,也不指向同网络下的其他容器。
  • 你在Feign客户端中将下游vehicles服务的请求地址硬编码为http://localhost:8082,API网关容器收到请求后,会尝试访问自身容器内部的8082端口,但vehicles服务实际运行在独立的vehicles容器中,因此会触发连接拒绝。
  • 本地开发环境无该问题,是因为所有服务直接运行在你的操作系统上,localhost指向当前主机,所有服务端口都可在本机直接访问。
  • 你使用的自定义bridge网络本身内置了DNS解析能力,同网络下的容器可以直接通过compose定义的服务名互相访问,不需要依赖宿主机的端口映射转发。

注:你在compose中自定义的网络命名为host但实际驱动为bridge,和Docker原生的host网络模式不是同一概念,该命名容易产生误导,本次故障和这个命名无直接关联,建议后续将自定义网络改名为更清晰的名称(比如microservice-net)避免混淆。

修复步骤
  • 修改所有Feign客户端的硬编码下游地址:将调用vehicles服务的地址从http://localhost:8082改为http://vehicles:8082;如果存在调用people服务的硬编码localhost地址,同步改为http://people:8081。Docker内置DNS会自动将compose中定义的服务名解析为对应容器的内网IP,直接走容器内网通信,稳定性和性能都比走宿主机端口映射更好。
  • 修正docker-compose配置中的笔误:api服务构建配置里写的Dockefile拼写错误,正确的默认文件名为Dockerfile,避免后续镜像构建失败。
  • 重新构建并启动所有服务:在docker-compose.yml所在目录执行docker-compose up -d --build重建服务栈,启动后可进入api容器执行curl http://vehicles:8082/api/car/findAll验证连通性,能正常返回接口结果即修复完成。

内容的提问来源于stack exchange,提问作者Kevin Pontón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:48:48