You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署PostgreSQL 14.1后无法连接,请求技术协助

问题描述

执行以下Docker命令启动Postgres 14.1容器:

docker run --name pgres --rm \
    -e POSTGRES_USER=uzer \
    -e POSTGRES_PASSWORD=1234 \
    -e POSTGRES_DB=sample_db \
    -p 5432:5432 postgres:14.1

容器日志显示数据库已准备好接受连接:

waiting for server to shut down...2024-07-24 18:07:19.272 UTC [48] LOG:  received fast shutdown request
.2024-07-24 18:07:19.273 UTC [48] LOG:  aborting any active transactions
2024-07-24 18:07:19.275 UTC [48] LOG:  background worker "logical replication launcher" (PID 55) exited with exit code 1
2024-07-24 18:07:19.275 UTC [50] LOG:  shutting down
2024-07-24 18:07:19.284 UTC [48] LOG:  database system is shut down
 done
server stopped

PostgreSQL init process complete; ready for start up.

2024-07-24 18:07:19.396 UTC [1] LOG:  starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2024-07-24 18:07:19.397 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-07-24 18:07:19.397 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2024-07-24 18:07:19.398 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-07-24 18:07:19.401 UTC [62] LOG:  database system was shut down at 2024-07-24 18:07:19 UTC
2024-07-24 18:07:19.405 UTC [1] LOG:  database system is ready to accept connections

但无法通过pgAdmin连接(弹窗如下),且日志中无任何连接失败相关记录:
pgAdmin - 注册服务器弹窗

解决方案

1. 排查本地端口占用

容器将5432端口映射到主机5432,若本地已有Postgres服务或其他程序占用该端口,会导致映射失效:

  • Windows检查端口:
    netstat -ano | findstr :5432
    
  • Linux/macOS检查端口:
    lsof -i :5432
    
  • 解决方法:停止占用端口的程序,或修改映射端口(如-p 5433:5432),之后用新端口连接。

2. 确认pgAdmin连接参数

确保pgAdmin的注册服务器参数完全匹配:

  • 主机名/地址:本地Docker填localhost或127.0.0.1;远程Docker主机填对应IP。
  • 端口:默认5432,若修改过映射端口则填新端口。
  • 用户名:uzer(注意拼写,不是默认的postgres或user)。
  • 密码:1234。
  • 维护数据库:可选填sample_db,留空会默认连接与用户名同名的数据库(这里是uzer)。

3. 绕过pgAdmin测试基础连接

用psql直接测试,排除pgAdmin自身问题:

  • 进入容器内部连接:
    docker exec -it pgres psql -U uzer sample_db
    
  • 从主机直接连接:
    psql -h localhost -p 5432 -U uzer -d sample_db
    

如果能成功连接,说明问题出在pgAdmin配置;如果连接失败,根据报错信息进一步排查。

4. 临时放宽Postgres认证规则测试

默认情况下Postgres可能对远程连接有严格认证,可临时添加环境变量放宽测试(生产环境禁止使用):

docker run --name pgres --rm \
    -e POSTGRES_USER=uzer \
    -e POSTGRES_PASSWORD=1234 \
    -e POSTGRES_DB=sample_db \
    -e POSTGRES_HOST_AUTH_METHOD=trust \
    -p 5432:5432 postgres:14.1

如果能连接成功,说明是认证规则导致的问题,后续可通过自定义pg_hba.conf配置合理的认证方式。

5. 检查Docker容器状态

  • 确认容器是否正常运行:
    docker ps
    
    查看pgres容器状态是否为Up,若已停止需重新启动(因使用--rm,重启需重新执行启动命令)。

内容的提问来源于stack exchange,提问作者imany apk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:40:54