Как заставить Docker-контейнеры взаимодействовать с не-Docker-приложением?

У меня есть ситуация, когда Docker-контейнерам приходится общаться с не-Docker-приложенным приложением и Docker-контейнерами на другом хосте.

Допустим, есть три сервера A, B и C. Сервер A имеет два док-контейнера, на которых работают контейнеры сервера приложений JBoss. Сервер B, не являющийся докером, имеет базу данных MySQL. Сервер C имеет другой набор контейнеров.

Я хочу, чтобы контейнер сервера приложений JBoss соединялся с базой данных MySQL, находящейся на другом хосте, и извлекал информацию из БД. JBoss также должен общаться с контейнерами, находящимися на сервере C.

Как это сделать?

PS: я новичок в докере

1 ответ

Решение

Контейнеры в мостовой / определяемой пользователем мостовой сети могут автоматически получать доступ к внешнему миру. Это происходит через маскировку IP, и Docker позаботится об этом.

  • MySQL базы данных находится на сервере B
  • у сервера A есть маршрут к серверу B, на котором работает mysql db.
  • 2 контейнера находятся на сервере А

Исходя из вышеизложенного, 2 контейнера должны быть в состоянии достичь mysql db.

Есть еще один часто задаваемый вопрос о доступе контейнеров к сервису в localhost. Вы можете сослаться на это обсуждение здесь ( изнутри контейнера Docker, как мне подключиться к локальному хосту машины?)

Ответ на обновленный вопрос:

Когда вы помещаете контейнер в оверлейную сеть в режиме роя, он также создает мостовую сеть (docker_gwbridge). Этот мост создан по умолчанию для внешнего доступа. Вы правы в том, что в этом случае контейнер является частью оверлейной и мостовой сети. Используя оверлейную сеть, контейнеры на сервере A могут взаимодействовать с контейнерами на сервере C. Чтобы контейнер на сервере A мог обращаться к БД (неконтейнерное приложение), вам просто необходим IP-адрес и порт БД, к которым вы можете напрямую обращаться изнутри контейнера., До тех пор, пока IP-адрес БД доступен с сервера А, он также будет доступен из контейнера, работающего на сервере А, через мостовую сеть. Вам не нужен какой-либо специальный DNS-флаг или что-либо еще.

Другие вопросы по тегам