2015-05-20 2 views
6

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

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

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

ответ

0

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

eureka: 
    instance: 
     ipAddress: 192.168.x.x 
+0

Это прекрасно, но ВГ at if IP меняется динамически каждый раз? Я хочу показать IP-адрес хоста, а не контейнер. –

+0

Если IP-адрес хоста динамически изменяется, передайте этот IP-адрес контейнеру в переменной среды и используйте эту переменную в конфигурации Spring. – Tyutyutyu

+1

Это вопрос, как передать IP-адрес хоста внутри контейнера с помощью службы AWS BeansTalk? –

0

Вы можете использовать переменные окружения в конфигурации эврика в 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 
2

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

Что нужно сделать, это добавить переменную окружения с 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 127.0.0.x ip 
    ip-address: "${HOST}" 
    client: 
    serviceUrl: 
     # Location of your eureka server 
     defaultZone: http://192.168.0.107:8761/eureka/ 

Бег с Докер

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

Бег с докер-компоновать

my_service: 
    image: image_name 
    environment: 
    - HOST=192.168.0.106 
    ports: 
    - your_port:container_port