在 Docker Desktop 中使用 PGAdmin 扩展用于 PostgreSQL 映像:无法连接

问题描述 投票:0回答:2

问题似乎与无法从 pgAdmin 连接到 Postgres 容器相同,但这些解决方案似乎都不起作用,而且我使用的工具略有不同......所以可能是不同的问题?

在我的 Docker 桌面(使用 Linux Docker 运行 Windows)中,标准安装中,我安装了 postgres:latest 映像并从中创建了一个容器。我使用了以下设置:

容器中的日志显示成功:

2023-05-28 14:56:30 2023-05-28 18:56:30.313 UTC [1] LOG:  starting PostgreSQL 15.3 (Debian 15.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2023-05-28 14:56:30 2023-05-28 18:56:30.313 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-05-28 14:56:30 2023-05-28 18:56:30.313 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2023-05-28 14:56:30 2023-05-28 18:56:30.319 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-05-28 14:56:30 2023-05-28 18:56:30.325 UTC [62] LOG:  database system was shut down at 2023-05-28 18:56:30 UTC
2023-05-28 14:56:30 2023-05-28 18:56:30.329 UTC [1] LOG:  database system is ready to accept connections

在终端选项卡上,我可以连接到本地实例:

# psql -p 5432 -U postgres
psql (15.3 (Debian 15.3-1.pgdg110+1))
Type "help" for help.

postgres=# \l
                                                List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Provider |   Access privileges   
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
(3 rows)

postgres=# 

我做了一个

docker inspect pgserver
并看到了这样的网络设置:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "7752ebc73909a6a14039b287472724b48fb8138d4466a41eb368fd91057dbcbc",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "5432/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "54320"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/7752ebc73909",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "a00a861f13fb77a019123b42affeed42f11a8cac8ab00f609b6b2cbfc76e4ee6",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a28aecb0b5fd55718069e079194fcf39c84a380041a82f0ec6de8f7b3565dd6a",
                    "EndpointID": "a00a861f13fb77a019123b42affeed42f11a8cac8ab00f609b6b2cbfc76e4ee6",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }

我还安装了 PGAdmin4 Docker Desktop 扩展,但我无法将其配置为连接到我的 postgres 实例。

  • 我尝试通过端口 5432 和 54320 连接到 127.0.0.1。
  • 我尝试在相同端口上连接到 172.17.0.3。
  • 我尝试在相同的端口上连接到 pgserver。
  • 我尝试在相同端口上连接到本地主机。
  • 我已确保 SSL 模式设置为“首选”。

根据我使用的内容,我会收到连接被拒绝或连接超时错误的错误消息。

我做错了什么?

根据评论中的要求,

docker ps
的结果如下。

docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS        PORTS                     NAMES
0ed9f3f293fd   postgres:latest   "docker-entrypoint.s…"   20 hours ago   Up 20 hours   0.0.0.0:54320->5432/tcp   pgserver
postgresql docker pgadmin
2个回答
1
投票

我感觉不是docker的问题,也不是端口配置的问题 但是 postgress 的配置特别是允许哪些连接在

中定义
/var/lib/pgsql/12/data/pg_hba.conf

您可能需要像这样配置它

host    all             all             0.0.0.0/0            md5

您需要通过卷持久化来做到这一点


0
投票

Docker 无法解析主机名,因为 PgAdmin 扩展也在单独的容器中运行。

在 PgAdmin 连接属性中使用

host.docker.internal
代替
localhost
127.0.0.1
来访问 PostgreSQL 服务器。

PgAdmin Database Connection Properties

© www.soinside.com 2019 - 2024. All rights reserved.