Подключение к Windows Postgres из контейнера Debian Docker - PullRequest
0 голосов
/ 11 октября 2018

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

Командная строка, используемая для создания контейнера Docker:

docker run --rm -d --network=host --name mycontainer myimage

Вpostgresql.conf:

listen_addresses = '*'  

In pg_hba.conf:

host    all             all             172.17.0.0/16           trust

В оболочке bash моего контейнера я запускаю:

psql -h 127.0.0.1

и получаюошибка:

psql: не удалось подключиться к серверу: соединение отклонено

Сервер работает на хосте "127.0.0.1" и принимает соединения TCP / IP через порт 5432?

Излишне говорить, что Postgres определенно работает на моем компьютере, и я могу запрашивать его из локальных приложений.Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

ЭТО НЕ РАБОТАЕТ ДЛЯ DOCKER v18.03 И НАВЕРХ
Ответ уже есть - Изнутри контейнера Docker, как мне подключиться к локальному узлу машины?

Этот вопрос относится к настройке mysql, но он должен работать и для вашего случая.

FOR DOCKER v18.03 ONWARDS

Используйте host.docker.internal для обозначения хост-машины.

https://docs.docker.com/docker-for-windows/networking/#i-cannot-ping-my-containers

0 голосов
/ 22 октября 2018

Как вы обнаружили, --network-host не работает с Docker для Windows или Docker для Mac. Он работает только на хостах Linux .

Один вариант для этого сценария может также заключаться в размещении PostgreSql в контейнере.Если вы развернете их с помощью файла docker-compose , у вас должно быть два отдельных контейнера Docker (один для базы данных и один для вашей службы), которые объединены в сеть.По умолчанию docker-compose будет предоставлять контейнеры другим в том же файле compose, используя имя контейнера в качестве своего DNS-имени.

Вы также можете рассмотреть возможность включения базы данных в тот же контейнер, что и ваш.сервис, но я думаю, что решение docker-compose лучше по нескольким причинам:

  1. Он придерживается наилучшей практики для каждого контейнера, имеющего только один процесс и одну ответственность.
  2. Этоозначает, что вы можете легко изменить и повторно развернуть свой сервис без необходимости заново создавать контейнер базы данных.
0 голосов
/ 11 октября 2018

Сконфигурируйте соединение внутри вашего док-контейнера с реальным IP-адресом вашего хоста или как обходной путь с DNS-именем

...