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

Docker容器中Eureka客户端连接服务端报Connection refused异常求助

Docker容器跨容器Eureka通信问题排查与解决方案

问题根因

  • 最核心的问题:你单独用docker run启动客户端容器时,没有加入docker-compose为Eureka服务端创建的专属自定义网络,客户端容器无法解析eurekahost这个主机名,Eureka的内部回退逻辑会自动尝试连接localhost:8761,就会抛出你遇到的连接拒绝异常。
  • 配置错误:客户端配置里eureka.instance.hostname是指定客户端自身的主机名,你错误配置为Eureka服务端的主机名eurekahost,也会导致注册逻辑异常。

修复步骤

1. 修正配置文件

Eureka服务端配置(无需大改,保持统一即可):

spring.application.name=eureka-service
server.port=8761

eureka.client.registerWithEureka = false
eureka.client.fetchRegistry = false
eureka.instance.hostname=eurekahost
eureka.client.serviceUrl.defaultZone  = http://eurekahost:8761/eureka

Eureka客户端配置(修正错误配置项):

server.port=8080
spring.application.name=user-service

eureka.client.registerWithEureka = true
eureka.client.fetchRegistry = true
eureka.client.serviceUrl.defaultZone  = http://eurekahost:8761/eureka
eureka.client.instance.preferIpAddress = false
# 移除错误的eureka.instance.hostname配置,或配置为客户端自身的标识

2. 调整容器启动方式,保证两个容器在同一个网络

方案A:将客户端也加入docker-compose配置(更推荐)

直接修改你的docker-compose.yaml,添加客户端服务定义,两个服务会自动加入同一个网络,无需额外配置:

services:
 eureka-server:
   image:  eurekaservice
   hostname: eureka-server
   container_name: eurekahost
   ports:
     - "8761:8761"
 user-service:
   image: bankuser
   ports:
     - "8083:8080"
   depends_on:
     - eureka-server

修改后直接执行docker-compose up -d即可同时启动两个服务,自动完成通信。

方案B:手动指定客户端加入服务端的网络

首先在docker-compose.yaml所在目录执行以下命令,查询服务端所在的网络名:
docker network ls
docker-compose默认创建的网络名格式为{当前目录名}_default,找到对应名称后,启动客户端时添加--network参数:
docker run -p 8083:8080 --network 你的网络名 bankuser

3. 验证

如果启动后还有问题,可以进入客户端容器执行ping eurekahost,如果能正常连通说明网络配置正常,再检查配置文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:15:03