容器中的Spring EurekaClient无法注册到本地主机上的EurekaServer或Docker容器中的EurekaServer

时间:2018-08-27 11:05:04

标签: spring docker docker-compose spring-cloud netflix-eureka

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

  • 如果我将EurekaServer放在Docker容器中并运行它,则localhost上的所有服务都可以注册到它
  • 如果我将服务放入Docker容器中并运行它,则它既无法注册到在本地主机上运行的EurekaServer,也无法注册到在Docker容器中运行的EurekaServer。

我还具有在localhost:8888上运行的Cloud Config Server,并且Docker容器中的服务无法访问它。 尝试在docker-compose,docker堆栈中运行所有程序,但均无效果。

用于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 。 感谢this post

0 个答案:

没有答案