Как получить доступ к сервису, объявленному в другом файле? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 2 файла для создания докеров:

первый:

version: '3'
services:
  service1:
  ports:
  - "8081:8080"
  ...

второй:

version: '3'
services:
  service2:
  ports:
  - "8088:8088"

с service2 Я пытаюсь выполнить http-запрос к server1:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://service1:8081/api/v1/test/": service1; nested exception is java.net.UnknownHostException:service1] with root cause
router    |
router    | java.net.UnknownHostException: resource.mng
router    |     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_171]
router    |     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Два способа:

1. Service1 и Service2 должны быть в одной сети !!

docker network create -d overlay --attachable my_net

первый:

...
  service1:
    ports:
      - "8081:8080"
    networks:
      - net
  ...
networks:
  net:
    external: true
    name: my_net

второй:

...
  service2:
    ports:
      - "8088:8088"
    networks:
      - net
  ...
networks:
  net:
    external: true
    name: my_net

inв этом случае запрос будет http://service1:8080/api/v1/test/

2. Вы перенаправляете порт на хост - "8081:8080" IP-адрес докера хоста по умолчанию 172.18.0.1 (установите флажокваш ifconfig)

Для этого случая запрос будет http://172.18.0.1:8081/api/v1/test/


Ответ на вопрос " Можно ли спросить докер-составить создать сеть, если она не существует?":

Да, это возможно.В первом файле составления:

version: "3.3"
...
...
networks:
  my_net:
    driver: overlay
    attachable: true

Если вы работаете docker stack deploy -c file.yml hello -> будет создана сеть с именем hello_my_net Если вы работаете docker-compose up -d -> будет создана сеть с именем directory-name_my_net (имя каталога, в котором находится файл docker-compose.yml)

Поэтому обратите внимание на имя сети.

Следующие службы подключаются к этой сети.

! Внимание,Версия составного файла должна быть> = "3.3"

0 голосов
/ 04 октября 2018
  1. Создать внешнюю сеть, если она не существует -

    $ docker network create service || true

  2. Определить внешнюю сеть для обоих файлов составления (сначала& second) -

    .........
       ports:
         - "8088:8088"
       networks:
         - service
    
     networks:
       service:
         external: true
    
  3. Сделайте up -d, и теперь вы сможете получить доступ к контейнеру service1 с именем service1 из контейнера service2.

Аналогично, вы также можете использовать сеть по умолчанию, созданную с помощью compose, но она будет добавлять префикс вашего текущего каталога к определенному сетевому имени.Вы также можете использовать режим сети хоста, но это не рекомендуется.

Обновление 1 -

  • docker compose создает сеть по умолчанию с префиксным именем каталога.https://docs.docker.com/compose/networking/
  • Недавно в Docker Compsoe 3.5 они запустили функцию произвольного имени.Таким образом, в случае, если вы можете использовать compose 3.5, вы можете указать собственное имя для вашей докерской сети compose.Compose создаст новую сеть, если она не существует. ( предпочтительно ) https://docs.docker.com/compose/compose-file/#name-1

Вы можете принять вызов в зависимости от ваших требований.Если вы работаете с оболочкой, вы можете выполнить приведенный ниже трюк с оболочкой, чтобы compose создала сеть, только если она не существует, и игнорируйте ее, если она уже создана.
$ docker network create service || true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...