Не удалось подключиться к удаленной базе данных PostgreSQL из локального контейнера докеров через туннель SSH; время соединения истекло

avatar
s.k
1 июля 2021 в 17:36
395
1
0

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?

Источник
Jim Jones
2 июля 2021 в 04:58
0

Вы проверяли файлы журналов? docker exec -it -u postgres containername psql работает?

s.k
2 июля 2021 в 07:59
0

Я проверю, могу ли я получить доступ к журналам удаленного сервера, но боюсь, что нет. Добавление параметра -u postgres при подключении к моему локальному контейнеру не решает проблему.

Ответы (1)

avatar
Akaisteph7
8 марта 2022 в 23:00
0

Решением для меня было убедиться, что туннель принимает все входящие соединения. По какой-то причине кажется, что docker не считается исходящим от машины или что-то в этом роде.

Итак, меняем линию туннеля на эту:

ssh -f -N <user@remote-server> -L 0.0.0.0:5433:127.0.0.1:5432