无法连接到 docker 容器中的 postgres

时间:2021-02-10 10:11:38

标签: postgresql docker

我在 Windows 上使用 Docker 在本地 postgres 数据库中使用。我制作了两个 docker 容器:一个用于名为 pg 的数据库,另一个用于 pgadmin4 的 pgadmin。 检查 pg 后,我在 172.17.0.3:5432 中连接了 pgadmin4 并且它工作正常。 现在是时候编写代码了,但是...

psycopg2.OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
        Is the server running on host "172.17.0.3" and accepting
        TCP/IP connections on port 5432?

我读了很多类似的问题,但我无法弄清楚。对我来说,似乎不像在 pg_hba.conf 中为被拒绝的连接生成的问题,因为在这种情况下 pgadmin 不应该工作,对吧? (但是如果是pg_hba.conf的问题在哪里可以找到呢?在docker安装文件夹里没找到)

我把我的 python 代码放在这里,但似乎没有问题:

conn = psycopg2.connect(
    database = 'example',
    user = 'username',
    password = 'secretpassword',
    host = '172.17.0.3', # default port is 5432 so it's not necessary
)

升级编辑: 我找到了配置 在 postgresql.conf 中,listen_addresses = '*',这是正确的。 在 pg_hba.conf 中:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

1 个答案:

答案 0 :(得分:0)

您可以使用 docker run--expose 参数在每个容器上公开您的端口。

您可以运行的另一个命令是 docker network connect,它允许您将容器连接到网络,因此如果两个容器在同一网络上,它们应该能够相互通信。

用法是docker network connect [OPTIONS] NETWORK CONTAINER

使用 docker network create 命令的一个优点是能够创建一个 --ip-range 以指定要在网络上使用的 IP 地址。

之后,您可以为容器分配一个特定的 IP 地址,docker network connect。例如,如果容器不在网络上,则 IP 地址不会重新分配给网络上的另一个容器。

docker 文档中的更多信息, https://docs.docker.com/engine/reference/commandline/network_connect/