Docker ограничения связи с контейнером - PullRequest
0 голосов
/ 06 февраля 2020

Моя установка основана на запуске двух Docker контейнеров, один с API, а другой с БД. Эта методология делает возможным, чтобы оба контейнера имели открытый порт для веб-служб.

Но я хочу, чтобы контейнер БД (toolname-db) мог быть открыт только для контейнера API (toolname-api). Это гарантирует, что БД не будет напрямую доступна веб-службам.

Как мне изменить настройки, чтобы убедиться, что то, что я хочу, возможно?

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

sudo docker build -t toolname .
sudo docker run -d -p 3333:3333 --name=toolname-db mdillon/postgis
sudo docker run -it -p 4444:4444 --name=toolname-api --network=host -d toolname

1 Ответ

0 голосов
/ 07 февраля 2020

Контейнер будет доступен снаружи Docker, только если у него есть опубликованные порты. Поэтому вам необходимо удалить параметр -p из контейнера базы данных.

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

Наконец, вы не делаете нужно --net host. Это отключает все настройки сети Docker; сопоставления портов с -p отключены, и вы не можете общаться с контейнерами, у которых сами порты не опубликованы. (Обычно я рекомендую как хак для работы с жестко закодированными localhost строками соединения.)

В результате ваша окончательная настройка будет выглядеть так:

sudo docker build -t toolname .
sudo docker network create tool
sudo docker run -d --net=tool --name=toolname-db mdillon/postgis
sudo docker run -d --net=tool -p 4444:4444 --name=toolname-api toolname

Как @BentCoder предлагает в комментарий, очень часто используется Docker Compose для запуска нескольких контейнеров вместе. Если вы это сделаете, создаст для вас сеть , которая может сэкономить вам шаг.

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