【问题标题】:Dockerized Zuul Gateway failing to connect to dockerized Eureka ServerDockerized Zuul Gateway 无法连接到 dockerized Eureka Server
【发布时间】:2019-11-05 15:58:27
【问题描述】:

我正在尝试制作 docker-compose.yml 文件,我应该能够从中使用 dockerized Spring boot 微服务并将它们连接到 dockerized Eureka 注册表,但是微服务发现 Eureka Server 注册表似乎存在问题,即使我的微服务之前连接到 Eureka 服务器,而只运行来自 Eclipse 的普通 .jar 应用程序。

首先我尝试通过对 Eureka 服务器和 Zuul 网关进行 dockerizing。 当 Eureka 被 docker 化并作为容器执行时(使用 docker run -p 8761:8761),它可以被非 docker spring boot 应用程序 Zuul gateway 访问。

当我 dockerize 并作为容器 Zuul 网关运行时(使用 docker run -p 8762:8762),它在 dockerized Eureka 服务器上无法识别。

另外,由于我意识到 docker 网络可能是一个问题,我决定为此使用 docker-compose 文件,并尝试使用相同的覆盖网络连接它们,但似乎再次没有成功.

另外需要注意的是,当 Eureka 服务器和 Zuul 网关都被 docker 化并作为容器运行时,两者都可以从浏览器和 postman 中访问,但他们看不到对方。

这是我的服务注册表(Eureka 服务器)application.properties

spring.application.name=service-registry
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false


eureka.server.wait-time-in-ms-when-sync-empty=0

这是我的api-gateway(Zuul网关)相关的application.properties

server.port=8762
spring.application.name=api-gateway

#eureka.client.enabled=false

eureka.client.service-url.default-zone=http://service-registry:8761/eureka/

这是我用于服务注册的 Dockerfile(Eureka 服务器)

FROM openjdk:8-jdk-alpine

ADD /target/service-registry-0.0.1-SNAPSHOT.jar service-registry.jar
ENTRYPOINT ["java", "-jar", "/service-registry.jar"]

EXPOSE 8761

这是我用于 api-gateway(Zuul 网关)的 Dockerfile

FROM openjdk:8-jdk-alpine

ADD target/api-gateway-0.0.1-SNAPSHOT.jar api-gateway.jar
ENTRYPOINT ["java", "-jar", "/api-gateway.jar"]

EXPOSE 8762

这是我的 docker-compose.yml

version: '3'
services:
  service-registry:
    image: ftntim1/xml-booking:service-registry
    ports:
      - "8761:8761"
    networks:
      - megatravel-network

  api-gateway:
    image: ftntim1/xml-booking:api-gateway
    ports:
      - "8762:8762"
    links:
      - service-registry
    depends_on:
      - service-registry
    environment:
        EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://service-registry:8761/eureka
    networks:
      - megatravel-network

networks:
  megatravel-network:
    driver: overlay 

【问题讨论】:

    标签: java spring docker netflix-eureka


    【解决方案1】:

    正如我后来看到的,看起来我只需要为 Zuul 代理的 application.properties 中的默认区域配置切换到骆驼表示法。

    之前:

    eureka.client.service-url.default-zone = http://service-registry:8761/eureka
    

    通过切换到:

    eureka.client.serviceUrl.defaultZone = http://service-registry:8761/eureka
    

    ..它开始正常连接。

    似乎是一个模棱两可的解决方案,所以我希望在 SO 上有 Spring Boot 经验的人评论这种情况并彻底解释发生了什么。

    【讨论】:

    • 天啊,这行得通,我和你有完全相同的问题。只需更改为 cameCase 作品,WTH
    • 我查看了文档,显然这是骆驼案 - cloud.spring.io/spring-cloud-netflix/multi/…,但唯一的问题是为什么它在作为没有 cameCase 的独立应用程序运行时可以工作,至少 SpringBoot 必须显示某种错误,读取 sqiwwly 行,据我了解,因为它是不正确的参数 springboot 忽略它并回退到默认值应该是 localhost:8761/eureka ,因此它继续在无知中工作。
    猜你喜欢
    • 1970-01-01
    • 2022-06-19
    • 2019-03-24
    • 1970-01-01
    • 2021-03-07
    • 2018-10-25
    • 2021-09-25
    • 2018-06-10
    • 2017-12-29
    相关资源
    最近更新 更多