You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker容器中PostgreSQL无法从主机连接的问题排查

问题分析与解决方案

你遇到的核心问题是容器端口未映射到主机,导致你从主机发起的连接没有指向容器内的PostgreSQL服务,反而可能连接到了主机本地的PostgreSQL(如果有的话),进而出现密码验证错误。

1. 修复端口映射问题

你使用--expose 5432仅声明容器暴露5432端口,但并未将该端口映射到主机端口。这意味着主机的127.0.0.1:5432无法直接访问容器内的PostgreSQL服务。

解决步骤:重新创建带端口映射的容器

先清理现有容器,再创建带端口映射的新容器:

# 停止并删除现有容器
docker stop aasaan_db_dev
docker rm aasaan_db_dev

# 创建绑定端口的容器
docker create --name aasaan_db_dev -e POSTGRES_USER=aasaan -e POSTGRES_PASSWORD=aasaan_admin -p 5432:5432 postgres:9.4.0

-p 5432:5432表示将主机的5432端口与容器的5432端口绑定,这样主机访问127.0.0.1:5432时,请求会直接转发到容器内的PostgreSQL服务。

2. 验证连接有效性

启动新容器后,再次尝试从主机连接:

psql -h 127.0.0.1 -U aasaan

输入密码aasaan_admin即可正常连接容器内的数据库。

额外检查项

  • 如果主机本地原本运行着PostgreSQL服务,会占用5432端口导致冲突。你可以选择停止本地PostgreSQL服务,或者将容器映射到其他端口(比如-p 5433:5432),然后用psql -h 127.0.0.1 -p 5433 -U aasaan连接。
  • 容器内的pg_hba.conf配置是正确的,host all all 0.0.0.0/0 md5已经允许外部地址通过密码验证连接,无需修改这部分配置。

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

火山引擎 最新活动