Как подключиться к докеризованной базе данных из-за пределов сети докеров на локальном компьютере

#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. Я добавил эту информацию к вопросам