spring cloud 无法从 docker 中的 zuul 获取服务

Posted

技术标签:

【中文标题】spring cloud 无法从 docker 中的 zuul 获取服务【英文标题】:spring cloud can't fetch service from zuul in docker 【发布时间】:2018-05-26 23:22:25 【问题描述】:

我有一个简单的 spring cloud 项目,它包含 4 个服务:

配置:8888 registry(eureka):8761 网关(zuul):8080 service-1:9527

enter image description here

项目部署在本地没有问题,

我可以在没有docker的情况下通过zuul成功获取service-1的api:

http://localhost:8080/service-1/test

但是当我使用 docker 部署时, 它抛出错误:Caused by: java.lang.RuntimeException: org.apache.http.conn.HttpHostConnectException: Connect to registry:9527 [registry/172.21.0.4] failed: Connection refused (Connection refused)

我只能使用 service-1 的 api 获取

http://localhost:9527/test

PS:这两个服务(gateway,service-1)已经成功注册到eureka

这是我的 docker-compose yml :

version: '3'
services:
  config:
    build: ./config
    ports:
      - "8888:8888"
  registry:
    build: ./registry
    ports:
      - "8761:8761"
    depends_on:
      - config
    environment:
      - SPRING_PROFILES_ACTIVE=prd
  gateway:
    build: ./gateway
    depends_on:
      - config
    links:
      - registry
      - service-1
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prd
  service-1:
    build: ./service-1
    ports:
      - "9527:9527"
    depends_on:
      - config
    links:
      - registry
    environment:
      - SPRING_PROFILES_ACTIVE=prd

谁能帮帮我?

【问题讨论】:

网关似乎存在配置错误。它正在尝试连接到registry:9527。能否提供网关的application.properties。 我为 gateway 设置了最简单的配置,只需设置 server.port:8080 和 spring.application.name:gateway,其他配置是默认的,除了在 docker 中通过 zuul 获取 api 之外,它都可以工作 【参考方案1】:

我已经解决了这个问题,我忘了在网关主类上添加@EnableDiscoveryClient,并覆盖了尤里卡实例主机名

【讨论】:

以上是关于spring cloud 无法从 docker 中的 zuul 获取服务的主要内容,如果未能解决你的问题,请参考以下文章

Docker 容器中的 Spring Cloud Config 无法访问

Spring Cloud Config Server 无法与 Docker 组合一起使用

Spring Cloud Netflix 和 Docker Compose - 无法向 eureka 注册服务

docker运行Spring Cloud使用外部IP

结合Docker运行Spring Cloud微服务的多种方式

Spring Cloud Samples Eureka - Docker - 在链接中使用下划线