Dockerized Zuul网关无法连接到dockerized的Eureka Server

时间:2019-06-23 17:57:43

标签: java spring docker netflix-eureka

我正在尝试制作docker-compose.yml文件,从中我可以使用dockerized的Spring boot微服务并将其连接到dockerized的Eureka注册表,但是即使发现Eureka Server注册表,微服务也似乎存在问题我的微服务在仅从Eclipse运行纯.jar应用程序之前就已连接到Eureka服务器。

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

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

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

另外,应该注意的是,当将Eureka服务器和Zuul网关都进行了docker化并作为容器运行时,都可以从浏览器和邮递员两者中访问它们,但它们彼此看不见。

这是我的服务注册表(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网关(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 

1 个答案:

答案 0 :(得分:0)

稍后我将看到,看来我只需要切换到骆驼符号即可在Zuul代理的application.properties中进行默认区域配置。

在此之前:

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

通过切换到:

eureka.client.serviceUrl.defaultZone = ${EUREKA_URI:http://localhost:8761/eureka}

(是本地主机,而不是service-git)

..它开始正确连接。

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