spring - 容器中的 Spring EurekaClient 无法注册到 localhost 上的 EurekaServer 或 docker 容器中的 EurekaServer
问题描述
我正在使用带有 Eureka 的 Spring Boot Cloud 开发一个项目。当我在我的机器上运行一切时,一切正常。但是当我开始使用 Docker 时:
- 如果我将 EurekaServer 放在 Docker 容器中并运行它,则 localhost 上的所有服务都可以注册到它
- 如果我将服务放在 Docker 容器中并运行它,它既不能注册到运行在 localhost 上的 EurekaServer 也不能注册到运行在 Docker 容器中的 EurekaServer
我还在 localhost:8888 上运行云配置服务器,Docker 容器中的服务无法访问它。尝试在 docker-compose、docker stack 中运行它,但都不起作用。
Eureka 服务器的 bootstrap.yml:
spring:
application:
name: conhub-eureka-server
cloud:
config:
uri:
- http://localhost:8888
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
用于 Eureka 服务器的 Dockerfile(我使用 fabric8 docker maven 插件):
FROM openjdk
VOLUME /tmp
ADD maven/conhub-eureka-server-0.0.1-SNAPSHOT.jar myapp.jar
RUN sh -c 'touch /myapp.jar'
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-
jar","/myapp.jar"]
bootstrap.yml 例如服务(它是一个 zuul 网关):
server:
port: 8765
spring:
cloud:
config:
enabled: true
uri: http://localhost:8888
application:
name: conhub-gateway
eureka:
client:
service-url:
default-zone: http://${EUREKA_SERVER_HOST:localhost}:8761/eureka
Dockerfile 示例服务:
FROM openjdk
VOLUME /tmp
ADD maven/conhub-gateway-0.0.1-SNAPSHOT.jar myapp.jar
RUN sh -c 'touch /myapp.jar'
EXPOSE 8765
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-
jar","/myapp.jar"]
我在这里阅读了很多帖子并尝试了一切但没有成功。我想我最大的惊喜是为什么容器中的服务在我的情况下无法访问http://localhost:8888进行配置?我可以轻松地手动访问它。
编辑 2 好吧,我终于找到了错误。在 EurekaClient 中,为 EurekaServer 编写 delault 区域的正确方法是: defaultZone不是default-zone。感谢这篇文章
解决方案
推荐阅读
- html - 有没有
或者 HTML中的标签? - docker - 尝试连接到 kubernetes 中的 couchbase 时超时
- c# - json 到 csv:C#
- computational-finance - 绘制 gBM 问题
- python-3.x - python中的karatsuba算法实现
- nuget - 有没有办法对给定的 Nuget 包进行校验和?
- c++ - 如何避免 std::string::resize 太慢
- python - 使用python自动创建excel报表
- intellij-idea - Maybe.fromCallable{}.subscribeOn() 可空性问题?
- c# - 我想使用实体框架从表中获取所有行,但邮递员出错