Java Spring не будет разговаривать с Consul при запуске в качестве контейнера Docker

Я пытаюсь решить то, что, по моему мнению, является распространенным вариантом использования микросервисов. В данном случае я тестирую consul с весенним облачным приложением. Я пытаюсь проверить консула двумя разными способами. Первый из них работает в контейнере докеров, а другой - на хост-машине докеров. Затем я пытаюсь запустить весенний облачный контейнер, который будет разговаривать с любым примером консула.

Мне не удалось заставить весеннее облачное приложение разговаривать с консулом, когда весеннее облачное приложение запускается как контейнер докеров. Когда облачное приложение Spring запускается в сетевом режиме хоста, оно работает, поскольку оно может разрешать порты localhost, но это неприемлемое решение, если я хочу запустить несколько экземпляров образа.

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

 consul1:
  image: progrium/consul
  ports:
    - "8400:8400"
    - "8500:8500"
    - "8600:53/udp"
    - "8600:53/tcp"
  environment:
      GOMAXPROCS: 100
      entrypoint: "/bin/consul"
      hostname: consul
      command: agent -log-level=debug -server -config-dir=/config -bootstrap -ui-dir /ui

simpletest:
    build: simpletest
    hostname: simpletest
    environment:  
      JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n -Dspring.cloud.consul.host=consul1"
    ports:
     - 39041:7051
     - 39052:7055
#     d2fdockerroot_consul1_1 consul
#    links:
#     - consul1

person Mimyck    schedule 23.12.2015    source источник
comment
Это должно сработать, как только вы включите часть links: - consul1, поскольку это приводит к записи в /etc/hosts самого простого контейнера, поэтому он разрешает consul1 hostname во внутренний IP-адрес докера контейнера consul1. Вы можете проверить это индивидуально, возможно, ваш JAVA_OPTS не используется (каким-то скриптом для установки этих параметров)?   -  person zapl    schedule 23.12.2015


Ответы (2)


Вот вам пример пивоваренной системы - https://github.com/spring-cloud-samples/brewery. Один из файлов - это файл docker-compose для CONSUL.

https://github.com/spring-cloud-samples/brewery/blob/master/docker-compose-CONSUL.yml

Ознакомьтесь со всеми application-consul.yaml файлами в базе кода, чтобы узнать, как настроить приложения Spring Boot для общения с консулом.

Пример: https://github.com/spring-cloud-samples/brewery/blob/master/aggregating/src/main/resources/application-consul.yaml

В случае возникновения проблем напишите здесь или перейдите на страницу spring-cloud gitter https://gitter.im/spring-cloud/spring-cloud

person Marcin Grzejszczak    schedule 23.12.2015
comment
Это было чрезвычайно полезно. Используя это, я смог изменить свой пример, чтобы указать URL-адрес консула, установив в среде spring.cloud.consul.host: discovery, что, по-видимому, достаточно для этого экземпляра. - person Mimyck; 23.12.2015

У меня была точно такая же проблема: ссылки на мой контейнер консула было недостаточно. Однако следующее помогло мне: как указано здесь, соответствующий хост консула и конфигурацию порта необходимо поместить в bootstrap.yml, а не в application.yml.

spring:
  cloud:
    consul:
      host: consul
      port: 8500

с соответствующим docker-compose.yml:

version: "2.0"

services:
  consul:
    image: consul:latest
    ports:
      - "8500:8500"
my-service:
    build: path/to/dockerfile
    depends_on:
      - consul
    links:
      - consul:consul
person user2035039    schedule 26.03.2017
comment
Спасибо! Столкнулся с той же проблемой, добавление bootstrap.yml решило мою проблему. - person AnirbanDebnath; 24.10.2018