首页 > 解决方案 > 容器中的 Spring EurekaClient 无法注册到 localhost 上的 EurekaServer 或 docker 容器中的 EurekaServer

问题描述

我正在使用带有 Eureka 的 Spring Boot Cloud 开发一个项目。当我在我的机器上运行一切时,一切正常。但是当我开始使用 Docker 时:

我还在 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。感谢这篇文章

标签: springdockerdocker-composespring-cloudnetflix-eureka

解决方案


推荐阅读