I am trying to connect
to a PostgreSQL database hosted on a remote server
from a PostGIS докер-контейнер, который запущен на моем ноутбуке (Ubuntu 18.04).
Моим самым первым шагом, естественно, было открытие туннеля SSH с моего ноутбука на удаленный сервер. На данный момент все в порядке, потому что я могу подключиться к терминалу на удаленном сервере через туннель SSH.
Затем, основываясь на этом ответе: https://coderhelper.com/a/24326540/6630397, я запустил док-контейнер PostGIS на своем компьютере с Ubuntu 18.04 для подключения к удаленной базе данных PostgreSQL. (Это необходимо для меня, потому что у меня есть проблема с несоответствием версий между моим родным pg_tools и версией pg на удаленном сервере.)
Но при попытке подключения к удаленной базе данных из моего локального контейнера время ожидания подключения истекло.
Технические данные
Предположим, что порт PostgreSQL на удаленном сервере является портом по умолчанию 5432
, туннель SSH был сопоставлен с моим локальным 5433
следующим образом:
ssh -f -N <user@remote-server> -L 5433:127.0.0.1:5432
И док-контейнер PostGIS был запущен как:
$ docker run --rm -d \
--add-host host.docker.internal:host-gateway \
--name postgis \
-v "/path/to/local/data_folder:/data" \
-e POSTGRES_DB=mydbname \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=password \
postgis/postgis:13-3.1
Затем я просто подключаюсь к нему, используя:
$ docker exec -it postgis bash
(подключение к этому контейнеру postgis путем указания -u postgres
не решает проблему)
И изнутри контейнера:
root@c1246180b316:/# psql -U postgres -h host.docker.internal -p 5433
Но на самом деле время ожидания соединения истекает (где он должен запрашивать пароль удаленной базы данных):
psql: error: could not connect to server: Connection timed out
Is the server running on host "host.docker.internal" (172.17.0.1) and accepting
TCP/IP connections on port 5433?
Если я запускаю точно такую же команду psql
из-за пределов док-контейнера, непосредственно на моем локальном компьютере, заменяя host.docker.internal
на localhost
, все работает нормально!
Как решить эту проблему и успешно подключиться к удаленной базе данных из контейнера postgis?
Вы проверяли файлы журналов?
docker exec -it -u postgres containername psql
работает?Я проверю, могу ли я получить доступ к журналам удаленного сервера, но боюсь, что нет. Добавление параметра
-u postgres
при подключении к моему локальному контейнеру не решает проблему.