Как заставить 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-флаг или что-либо еще.