Соедините два экземпляра докера на локальном хосте с отображениями портов - PullRequest
1 голос
/ 01 мая 2019

У меня есть два док-контейнера, которые хотят работать как подключенные.Один экземпляр докера ( instance1 ) связан с клиентом, а другой докер ( instance2 ) хочет подключиться к instance1.Главным образом это происходит, когда клиент отправляет запрос экземпляру 1, instatnce1 хочет вызвать службу instance2 и получить ответ.Затем передайте это клиенту.

В настоящее время я использую следующие команды Docker для запуска образов Docker

instance1

docker run --name instance1 -d -p 8290:8290 composite-service

Этот экземпляр имеет службу - http://localhost:8290/composite.Эта служба вызывает службу в instance2

instance2

docker run --name instance2 -d -p 8291:8290 service-backend

Этот экземпляр имеет службу - http://localhost:8291/service. Когда это вызваноСлужба ответит некоторыми данными на запрос.(на самом деле эта служба запускается на порту 8290, но она подвергается внешним воздействиям на порту 8291)

Проблема заключается в том, что клиент вызывает службу в instance1 (* 1032).* это показывает ошибку

Connection refused or failed for : localhost/127.0.0.1:8291

Как я могу решить эту проблему? Я хочу соединить эти 2 контейнера с существующими сопоставлениями портов, переданными в командах запуска docker.

Я попытался --link и--net Команды для подключения этих двух контейнеров, но результат был тот же.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Опираясь на ответ Беллакна, проще всего, на мой взгляд, использовать докерную композицию.

Файл dockercompose будет выглядеть примерно так:

version: "3.7"
services:
  service:
    image: composite-service:latest
    ports:
      - 8290:8290
  backend:
    image: service-backend:latest
    expose:
      - 8290

Теперь вместо использования docker run … вы сохраняете указанный выше код в файле с именем docker-compose.yml и запускаете docker-compose up из папки, в которой этот файл сохраняется.

Теперь ваш композитный сервис больше не должен вызывать http://localhost:8291/service, а вместо этого использовать что-то вроде backend: 8290 / service.

Подробнее о compose-файлах вы можете прочитать в официальной документации: https://docs.docker.com/compose/compose-file/

Дополнительным преимуществом является то, что таким образом service-backend доступен только в сети создания докеров (не на локальном хосте). Если вы хотите получить доступ к своему бэкэнду, удалите оператор expose и добавьте ports.

0 голосов
/ 01 мая 2019

localhost внутри контейнера всегда относится к самому контейнеру (если вы не начинаете их с --net host).

Если вы хотите, чтобы контейнеры взаимодействовали, я рекомендую Docker Compose . Затем контейнеры могут ссылаться друг на друга, используя имена своих сервисов (если вы запускаете их в одной сети, конечно, но это по умолчанию), то есть instance1 может достигать instance2 через http://instance2:8291/service.

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