java - Dockerized Zuul 网关无法连接到 dockerized Eureka 服务器

标签 java spring docker netflix-eureka

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

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

当我将其作为容器 Zuul 网关进行 dockerize 并运行时(使用 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/

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

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 

最佳答案

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

之前:

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

切换到:

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

..它开始正确连接。

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

关于java - Dockerized Zuul 网关无法连接到 dockerized Eureka 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726490/

相关文章:

java - 计算递归算法的时间复杂度。

Java,你怎么称呼这个?以及为什么)};

java - 如何使用 JPA 表示 Map<EntityType, Integer> 关系?

java - 该类没有定义 IdClass

windows - 无法连接到 Windows 10 上的 postgres

php - Docker 撰写文件未显示来自 wp-config.php 的 PHP 错误?

java - Android、Foursquare 和 &#8212;特点

java - ReadyState 保持为空

java - 从服务器下载 Spring REST 文件

postgresql - 我如何使用 docker-compose 让 postgres 数据持久化