#windows #postgresql #docker #networking
Вопрос:
Я создал этот контейнер docker для своей базы данных postgres на своей машине с Windows:
docker run -d -p 5432:5432 --rm --name pg_container -v C:pgdata:/var/lib/postgresql/data --env-file ./database.env postgres:latest
И если я выполняю docker exec -it pg_container bash
и выполняю psql
команду, я могу создать имя базы mydb
данных (в реальной ситуации это создается приложением flask).
Если я побегу
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tma_pg_db_container
Я получу 172.0.0.2
Теперь я хочу подключиться непосредственно к базе данных из-за пределов контейнера.
psql postgresql://postgres:lt;PASSWORDgt;@lt;IP_ADDRESSgt;:5432/tma_pg_db
Для чего я должен использовать IP_ADDRESS
?
Пожалуйста, обратите внимание, что у меня есть еще одна база данных psotgres, созданная на системном уровне, а не в контейнере. Для этого я использую localhost, и он отлично работает, он подключается. Если я использую localhost, он подключается к базе данных системного уровня, а не к контейнеру внутри контейнера docker.
Комментарии:
1.
localhost
или127.0.0.1
.2. Пожалуйста, обратите внимание, что у меня есть еще одна база данных psotgres, созданная на системном уровне, а не в контейнере. Для этого я использую localhost и отлично работает, он подключается.
3. Скажем, вам придется изменить номер порта для вашего контейнера
-p 5433:5432
. Затем соединитесь с локальным хостом:5433.
Ответ №1:
Вы должны использовать localhost
. Это позволит подключиться к порту, который вы опубликовали с помощью этой docker run -p
опции.
(Если вы используете решение на базе виртуальной машины, такое как Docker Machine или Docker Toolbox, вместо этого вам нужен его IP-адрес; docker-machine ip
он сообщит вам, что это такое. Если вы звоните с другого хоста, используйте IP-адрес физического хоста так же, как если бы служба не работала в контейнере.)
Два важных следствия из этого заключаются в том, что (а) вам не нужны инструменты отладки, например docker exec
, для взаимодействия с вашей базой данных; и (б) вам не нужно искать docker inspect
IP-адрес (который также не работает во многих распространенных контекстах).
Комментарии:
1. У меня есть еще одна база данных psotgres, созданная на системном уровне, а не в контейнере. Для этого я использую localhost и отлично работаю
2. Я добавил эту информацию к вопросам