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

微服务通过Docker Compose部署时无法注册到Eureka服务注册中心

问题分析与解决方案

核心问题

Docker容器内部的localhost指向容器自身,而非宿主机。你的Gateway配置中使用http://localhost:8761/eureka/,在容器环境下会尝试访问Gateway容器自己的8761端口,而非Eureka容器的服务。

在Docker Compose创建的同一个网络中,服务可以通过服务名称直接互相访问(Compose会自动做DNS解析),这是解决问题的关键。

具体修改步骤

1. 更新Gateway的application.yml

将Eureka的defaultZone地址中的localhost替换为Compose中Eureka的服务名eureka:

spring:
 cloud:
   gateway:
     routes:
       - id: identity-service
         uri: lb://IDENTITY-SERVICE
         predicates:
           - Path=/auth/**

 application:
   name: SWIGGY-GATEWAY

eureka:
  client:
    service-url:
      defaultZone : http://eureka:8761/eureka/

2. 补充说明:关于depends_on

depends_on仅保证容器启动顺序,不确保Eureka服务完全就绪。如果Gateway启动时Eureka还没初始化完成,可能会出现短暂的注册失败,但Spring Cloud客户端会自动重试。如果需要更可靠的启动顺序,可以为Eureka添加健康检查:

修改docker-compose.yml中的eureka服务配置,增加健康检查:

eureka:
  image: 'eureka:latest'
  build:
    context: ./swiggy-service-registry
    dockerfile: Dockerfile
  container_name: eureka
  networks:
    - test-network
  ports:
    - "8761:8761"
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:8761/actuator/health"]
    interval: 10s
    timeout: 5s
    retries: 5

同时确保Eureka服务添加了Spring Boot Actuator依赖,并开启健康端点。

3. 验证修改

重新构建并启动服务:

docker-compose down
docker-compose up --build

访问Eureka控制台http://localhost:8761,查看Gateway是否成功注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:46