Доступ к контейнеру Docker postgres из другого контейнера - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать переносимое решение для подключения контейнера приложения к контейнеру postgres.Под «переносимым» я подразумеваю, что я могу дать пользователю две docker run команды, по одной для каждого контейнера, и они всегда будут работать вместе.

У меня есть док-контейнер postgres, работающий на моем локальном ПК, и язапустите его следующим образом:

docker run -p 5432:5432 -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

, и я смогу получить к нему доступ из приложения python flask, используя адрес 127.0.0.1:5432.

Я поместил приложение python в контейнер докера какхорошо, и у меня возникают проблемы при подключении к контейнеру postgres.

Адрес 127.0.0.1:5432 не работает.

Адрес 172.17.0.2:5432 DOES работа (172.17.0.2 isадрес док-контейнера, на котором запущен postgres).Однако я считаю это непереносимым, потому что не могу гарантировать, каким будет IP-адрес контейнера postgres.

Мне известен флаг --add-host, но он также запрашивает IP-адрес хоста, который мне нуженбыть локальным (127.0.0.1).Несмотря на несколько попаданий на --add-host, я не смог заставить это работать так, чтобы последние команды запуска докера могли быть одинаковыми на любом компьютере, на котором они запускаются.

Я также попробовал это: Доступ к порту док-контейнера из другого контейнера

Моя ситуация такова, что postgres и myApp будут контейнерами, работающими на одном компьютере.Я бы предпочел решение, не основанное на Docker.

1 Ответ

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

Комментарий от Труонга заставил меня попробовать этот подход (снова), и я заставил его работать.Вот мои шаги на случай, если это поможет другому.Суть проблемы заключалась в том, что одному контейнеру требовался адрес другого контейнера, который был статичным (не изменился).Использование определяемой пользователем сети было ответом, потому что вы можете назвать контейнер и, таким образом, ссылаться на этот IP-адрес контейнера по этому имени.

Мои шаги,

docker network create mynet
docker run --net mynet --name mydb -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

Теперь IP-адрес postgresбаза данных mydb, и все порты этого контейнера открыты для любого другого контейнера, работающего в этой сети.

Теперь добавьте внешнее приложение,

docker run --net mynet -ti -p 80:80 -v mydockerhubaccount/myapp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...