java - Dockerized Zuul Gateway 无法连接到 dockerized Eureka Server
问题描述
我正在尝试制作 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
解决方案
正如我后来看到的,看起来我只需要为 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 经验的人评论这种情况并彻底解释发生了什么。
推荐阅读
- postgresql - 在 debian10 arm64 上编译 timescaledb 源代码
- google-chrome-extension - 是否可以为扩展弹出窗口设置动画?
- c# - 如何将 g.ToList() 的所有实例包含到 Value
- html - 使用 Angular 只需单击一次复选框即可启用所有复选框
- linux - 如果 .log 文件不为空,如何在 .log 文件中使用 grep 命令
- c# - 检查十六进制数的条件
- nestjs - NestJS Config 部分注册和验证
- javascript - 错误:使用 sendgrid 时找不到模块“sendgrid”
- kotlin - 即使 LiveData 包含一个值,它也会返回空值
- glsl - 在 WebGL 中将数据放到不同的纹理上并将其取出