首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过SSH隧道从本地码头容器连接到远程PostgreSQL数据库;连接超时

问无法通过SSH隧道从本地码头容器连接到远程PostgreSQL数据库;连接超时
EN

Stack Overflow用户
提问于 2021-07-01 17:36:00
回答 1查看 498关注 0票数 0

我在试着连接

访问托管在远程服务器上的PostgreSQL数据库。

在我的笔记本电脑上启动的PostGIS 码头集装箱 (Ubuntu18.04)。

我的第一步是自然地从我的笔记本电脑打开一个SSH隧道到远程服务器。到目前为止,一切都没问题,因为我可以通过SSH隧道连接到远程服务器上的终端。

然后,基于这个答案:https://stackoverflow.com/a/24326540/6630397,我在我的Ubuntu18.04机器上启动了PostGIS停靠容器,以连接到远程PostgreSQL数据库。(这对我来说是必要的,因为我的本地pg_tools和远程服务器上的pg版本之间存在一些版本不匹配的问题。)

但是,当试图从本地容器连接到远程数据库时,连接超时。

技术细节

让我们假设远程服务器上的PostgreSQL端口是默认的5432,SSH隧道被映射到本地5433,如下所示:

代码语言:javascript
复制
ssh -f -N <user@remote-server> -L 5433:127.0.0.1:5432

PostGIS码头容器启动时为:

代码语言:javascript
复制
$ 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

然后,我简单地使用以下方法连接到它:

代码语言:javascript
复制
$ docker exec -it postgis bash

(通过指定-u postgres连接到这个postgis容器并不能解决这个问题)

从容器内部:

代码语言:javascript
复制
root@c1246180b316:/# psql -U postgres -h host.docker.internal -p 5433

但是,连接实际上是超时的(它应该在那里请求远程db密码):

代码语言:javascript
复制
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命令,直接在本地机器上运行,用localhost替换host.docker.internal,它工作得很好!

如何解决此问题并成功地从postgis容器中连接到远程数据库?

EN

回答 1

Stack Overflow用户

发布于 2022-03-08 23:00:42

我的解决方案是确保隧道接受所有传入的连接。出于某种原因,对接者似乎不算来自机器或类似的东西。

所以,把隧道改为:

代码语言:javascript
复制
ssh -f -N <user@remote-server> -L 0.0.0.0:5433:127.0.0.1:5432
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68214643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档