Spring EurekaClient в контейнере не может зарегистрироваться на EurekaServer на локальном хосте или на EurekaServer в док-контейнере - PullRequest
0 голосов
/ 27 августа 2018

Я разрабатываю проект, используя Spring Boot Cloud с Eureka.Когда я запускаю все на моей машине, все работает нормально.Но когда я начинаю использовать Docker:

  • , если я помещаю EurekaServer в контейнер Docker и запускаю его, все сервисы на localhost могут зарегистрироваться на нем
  • , если я помещаю сервис в контейнер Docker изапустить его, он не может зарегистрироваться ни на EurekaServer, работающем на локальном хосте, ни на EurekaServer, работающем в контейнере Docker

У меня также есть Cloud Config Server, работающий на localhost: 8888, и сервисы в контейнере Docker не могут получить к нему доступ.Пробовал запускать все это в docker-compose, в докерском стеке, ничего из этого не работает.

bootstrap.yml для сервера Eureka:

spring:
  application:
    name: conhub-eureka-server   
  cloud:
    config:
      uri:
      - http://localhost:8888 
server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

Dockerfile для сервера Eureka (я использую плагин 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 правильный способ записи зоны delault для EurekaServer: defaultZone not default-zone .Благодаря этому сообщению

...