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连接(弹窗如下),且日志中无任何连接失败相关记录:
解决方案
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 pspgres容器状态是否为Up,若已停止需重新启动(因使用--rm,重启需重新执行启动命令)。
内容的提问来源于stack exchange,提问作者imany apk
相关产品推荐
相关产品推荐

