如何连接到 postgres 在 docker 上的另一台服务器上的 postgres?

How to connect to postgres on another server where postgres is on docker?

我可以用那种方式连接到 postgres。 在我的本地机器上我 运行:

  1. ssh name@ip -p 22

  2. 输入 --> 密码

然后

  1. sudo docker-compose exec postgres bash

在那之后我可以完全访问我的 postgres 数据库。 我如何使用 python 连接到该数据库?

我知道像 psycopg2 这样的库,但我没有找到任何示例如何连接到另一台服务器上的数据库以及 docker 或 运行。

这里一共有三层。

  1. 您的本地计算机。
  2. 服务器。
  3. 容器运行连接数据库。

每一层之间,都有一个缝隙。之间 (1) 和 (2) 你有互联网。之间 (2) 和 (3) 你有 docker 网络。

现在,你在问题中描述的是这样的。

你先用SSH跨越(1)-(2)的鸿沟然后 你用命令越过 (2)-(3) sudo docker-compose exec postgres bash.

现在针对您在评论中的问题,根据 docker documentationdocker-compose exec <container-name or id> <command> 将 运行 a command in a containersudo 将您的权限提升到 root 帐户。 由于命令是 bash,您实际上打开了一个交互式 shell 容器。

现在这种跨越两个间隙的方法会起作用,你也观察到了,但是对于 psycopg2图书馆,不会。

再次使用 docker 文档,您可以告诉 docker 消除 (2)-(3) 差距 对于您来说,这主要是 publishing a port。你可以告诉 docker 映射 服务器上的端口到容器上的端口,因此可以消除 (2)-(3) 间隙。 此时,服务器上某个端口的连接将传递给容器 在定义的端口。

现在您唯一需要跨越的差距就是 (1)-(2),现在可以通过 psycopg2 完成 很容易(假设防火墙允许在该端口上进行入站连接)。

现在,关于如何告诉 docker 消除 (2)-(3) 间隙的详细信息在 Connecting to Postgresql in a docker container from outside 的答案中。它还向您展示了如何使用 psql 直接从本地计算机连接到数据库。