как подключить мой докер-контейнер (внешний интерфейс) к контейнеризованной базе данных, работающей на другой виртуальной машине - PullRequest
0 голосов
/ 17 января 2019

Невозможно подключиться к контейнерам, работающим на отдельных хостах докера

У меня есть 2 Docker-контейнера Tomcat, работающие на 2 разных Ubuntu vm. В System-A запущен веб-сервис, а в System-B - БД. Я не смог выяснить, как подключить приложение, работающее в системе-A, к базе данных, работающей в системе-B. Когда я запускаю базу данных в системе A, приложение (которое также работает в системе A) может подключаться к базе данных. Я использую docker-compose для настройки сети (которая отлично работает, когда оба контейнера работают на одной и той же виртуальной машине). Я execd в файл etc / hosts в контейнере приложения на system-A, и я думаю, что отсутствует IP-адрес System-B.

services:
  db:
    image: mydb
    hostname: mydbName
    ports:
      - "8012: 8012"
    networks:
     data:
       aliases:
        - mydbName
   api:
     image: myApi
     hostname: myApiName
     ports:
        - "8810: 8810"
     networks:
       data:
networks:
  data:

1 Ответ

0 голосов
/ 17 января 2019

Вы бы настроили это точно так же, как если бы Docker не участвовал: настройте экземпляр Tomcat с DNS-именем или IP-адресом другого сервера. Вам необходимо убедиться, что служба опубликована вне пространства Docker, используя директиву ports:.

На server-a.example.com вы можете запустить этот docker-compose.yml файл:

version: '3'
services:
  api:
    image: myApi
    ports:
      - "8810:8810"
    env:
      DATABASE_URL: "http://server-b.example.com:8012"

А на server-b.example.com:

version: '3'
services:
db:
  image: mydb
  ports:
    - "8012:8012"

В принципе, можно установить оверлейную сеть , соединяющую два хоста, но это значительно более сложная настройка.

(Вы определенно не хотите использовать docker exec для изменения /etc/hosts в контейнере: вам придется повторять этот шаг каждый раз, когда вы удаляете и воссоздаете контейнер, а ручное обслуживание файлов хостов утомительно и приводит к ошибке -Prone, особенно если вы перемещаете контейнеры между хостами. Консул может работать как система обнаружения служб, которая предоставляет службу DNS.)

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