首页 > 解决方案 > 从 docker 外部的客户端到 postgres 的连接对用户 postgres 具有致命的密码身份验证

问题描述

我的目标是将客户端数据库(DBeaver、Aginity Pro)连接到在 docker 容器上运行的 PostgreSQL。

从容器内部,与 Postgres 的连接是成功的。我使用了Adminer 和PSQL,并且连接正常。我可以创建数据库、表格、加载数据。但是,使用来自客户端数据库的相同连接字符串,我收到消息:FATAL: password authentication failed for user "postgres"

如果有人在 Win10 x64 Pro 上与 PostgresqlDocker 和 DBeaver 有工作连接,我将不胜感激,请分享环境及其所做的工作。谢谢你。

这里的步骤:

  1. 下载适用于 Windows 的 Docker。
  2. 创建一个 YML 文件。
  3. 运行 Docker。
  4. 使用管理员和 PSQL 检查与 Postgres 的连接。成功
  5. 使用 DBeaver 和 Aginity Pro 检查与 Postgres 的连接。失败

文件 YML:

version: '3.6'
services:
  db:
    image: postgres:9.6-alpine
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - 5432:5432
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

运行泊坞窗:

docker-compose up -d

使用 Adminer 和 PSQL 检查连接:

1. 管理员

http://localhost:8080/?pgsql=db&username=postgres&db=postgres&ns=

它显示了管理控制台,我可以看到表格,并创建自己的数据结构。

2.PSQL

在这里,我创建了表格。

docker exec -it postgres_db_1 bash

bash-5.1#

bash-5.1# su postgres
/ $

/ $ psql
psql (9.6.20)
Type "help" for help.

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


检查与 DBeaver 的连接

数据库连接设置

我做了什么来尝试将 Postgres 与 DBeaver 和 Aginity Pro 连接起来:

  1. 更改图像。我还使用了三个不同的图像:
image: postgres

image: alpine

image: postgres:9-alpine
  1. 编辑pg_hba.conf。我在“本地”部分添加:
local   all         postgres                          ident

我也为信任更改了身份。我在最后补充:

host   all         all          all               md5

host   all         all          *               trust

我尝试单独使用 md5,也单独使用 trust。

  1. 我使用以下方法更改了 PSQL 中的用户密码:
ALTER USER postgres PASSWORD 'postgres';

我用portqryui检查了监听端口。这是在听。

=============================================

 Starting portqry.exe -n 127.0.0.1 -e 5432 -p TCP ...


Querying target system called:

 127.0.0.1

Attempting to resolve IP address to a name...


IP address resolved to kubernetes.docker.internal

querying...

TCP port 5432 (unknown service): LISTENING
portqry.exe -n 127.0.0.1 -e 5432 -p TCP exits with return code 0x00000000.

环境:

我使用的突出显示的链接:

标签: postgresqldockerdocker-composedbeaveraginity

解决方案


检查您的 Windows 机器上是否有本地安装的 PostgreSQL 服务器。

如果是这样,请停止服务并重新测试 DBeaver 连接。如果这可行,则更改本地服务器的端口或 docker 容器的主机端口。


推荐阅读