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

Docker环境下Feign重试异常问题排查求助

问题分析

从报错信息Connection refused: localhost/127.0.0.1:3000可明确:Gateway服务在Docker容器内尝试访问localhost:3000,但容器内的localhost指向容器自身,而非运行认证授权服务的容器,导致连接失败。

本地运行正常是因为所有服务都在宿主机,localhost指向宿主机;但Docker部署后每个服务是独立容器,localhost的指向发生了本质变化。

解决方案

1. 修正Gateway路由配置(核心修复)

修改gateway-service的application.properties,将硬编码的localhost替换为对应服务的Eureka注册服务名(推荐,利用服务发现)或Docker Compose中的服务名称:

# 替换原有的路由配置,改用服务发现+负载均衡
spring.cloud.gateway.routes[0].id=user-service
spring.cloud.gateway.routes[0].uri=lb://user-service
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/v1/users/**

spring.cloud.gateway.routes[1].id=authentication-authorization-service
spring.cloud.gateway.routes[1].uri=lb://authentication-authorization-service
spring.cloud.gateway.routes[1].predicates[0]=Path=/api/v1/auth/**

# 修正Eureka配置,使用Docker网络内的服务名访问Eureka
eureka.client.serviceUrl.defaultZone=http://eureka-service:8761/eureka
eureka.client.instance.preferIpAddress=true

说明:

  • lb://前缀表示启用负载均衡,基于Eureka服务发现直接通过服务名称路由到对应实例。
  • 若不依赖Eureka,也可直接用Docker Compose中的服务名称(如http://authentication-authorization-service:3000),同一Docker网络内服务名可直接解析。

2. 检查FeignClient配置(Auth与User服务通信)

确保Auth服务中的FeignClient调用User服务时,使用服务名称而非localhost:

示例FeignClient接口:

@FeignClient(name = "user-service") // 使用Eureka注册的服务名
public interface UserServiceClient {
    // 业务接口方法
}

禁止使用@FeignClient(url = "http://localhost:3005")这类硬编码配置。

3. 验证服务注册状态

登录Eureka控制台(http://localhost:8761),确认authentication-authorization-service和user-service已成功注册到Eureka。

4. 重启服务

修改配置后,重新构建并启动所有服务:

docker-compose down
docker-compose up --build
额外排查点
  • 确认main-network网络存在,所有服务都已加入该网络。
  • 调整服务启动顺序,确保Eureka服务完全启动后,其他服务再启动(可在docker-compose中为其他服务添加depends_on: - eureka-service,或添加启动等待脚本)。
  • 查看认证授权服务日志,确认服务已正常启动并监听3000端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:20