Зарегистрируйтесь в Eureka из Docker с настраиваемым IP-адресом

Я запускаю Spring Cloud Eureka внутри своей виртуальной машины Docker. У меня есть службы, зарегистрированные на нем, но они используют свой IP-адрес изнутри виртуальной машины Docker, но чтобы иметь возможность использовать их должным образом, мне нужно, чтобы они использовали IP-адрес, к которому я могу получить доступ извне виртуальной машины.

Например, внутри моей виртуальной машины регистр использует 172.x.x.x, и я могу получить доступ к интерфейсу REST из моего браузера, используя 192.168.x.x.x. Мне нужно, чтобы они зарегистрировались как 192.168.x.x.x.

Как я могу сказать моей службе, что нужно регистрироваться с определенным IP-адресом?


person Blue    schedule 20.05.2015    source источник


Ответы (4)


Вы можете настроить его в своем application.yml:

eureka:
    instance:
        ipAddress: 192.168.x.x
person Tyutyutyu    schedule 22.06.2015
comment
Это нормально, но что, если IP каждый раз меняется динамически? Я хочу раскрыть IP-адрес хоста, а не контейнер. - person Vladimir Rozhkov; 01.07.2015
comment
Если IP-адрес хоста изменяется динамически, передайте этот IP-адрес контейнеру в переменной среды и используйте эту переменную в конфигурации Spring. - person Tyutyutyu; 06.07.2015
comment
Возникает вопрос, как передать IP-адрес хоста внутри контейнера с помощью сервиса AWS BeansTalk? - person Vladimir Rozhkov; 07.07.2015

Оба предыдущих ответа верны, но я сделаю копирование проще.

Что вам нужно сделать, так это добавить переменную среды с IP-адресом хоста при запуске вашего контейнера и включить его в файл Spring Boot application.yml.

application.yml

eureka:
  instance:
    # Necessary for Docker as it doesn't have DNS entries
    prefer-ip-address: true
    # Necessary for Docker otherwise you will get 172.0.0.x IP
    ip-address: "${HOST}"
  client:
    serviceUrl:
      # Location of your eureka server
      defaultZone: http://192.168.0.107:8761/eureka/

Запуск с Docker

docker run -p <port>:<port> -e HOST='192.168.0.106' <image name>

Запуск с помощью docker-compose

my_service:
  image: image_name
  environment:
    - HOST=192.168.0.106
  ports:
    - your_port:container_port
person Yoshua Nahar    schedule 12.12.2017
comment
Как мне сделать в docker-compose, чтобы установить хост другой службы, определенный там? - person AleGallagher; 11.03.2021

Зарегистрируйтесь в Eureka с индивидуальным IP и индивидуальным ПОРТОМ:

server:
  port: 18090
eureka:
  instance:
    prefer-ip-address: true
    ip-address: 10.150.160.21
    non-secure-port: 8080

Я столкнулся с ситуацией, когда 10.150.160.21:8080 отображается на 192.168.1.124:18090 через брандмауэр. Приложение работает на 192.168.1.124:18090, но необходимо зарегистрироваться в Eureka с 10.150.160.21:8080.

Меня устраивает.

person bootsoon    schedule 21.06.2018

Вы можете использовать переменные среды в конфигурации eureka в application.yml.

В следующем примере я использую переменные среды $HOST и $PORT, чтобы сообщить клиенту eureka, какие значения использовать. В моем случае эти переменные устанавливаются Mesos / Marathon. Вы можете найти другие полезные переменные, установленные Docker.

У меня работает следующее:

eureka:
  client:
    serviceUrl:
       defaultZone: http://discovery.marathon.mesos:31444/eureka/
    registerWithEureka: true
    fetchRegistry: true
  instance:
    appname: configserver
    health-check-url: /health
    prefer-ip-address: true
    ip-address: "${HOST}" # mesos/marathon populates this in the environment
    non-secure-port: "${PORT}" # mesos/marathon populates this in the environment
person Matt Friedman    schedule 31.03.2016