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

Docker内创建的PostgreSQL数据库本地psql连接后不显示

问题根因

你本地连接时实际连的不是Docker容器内的PostgreSQL实例,是Windows系统本地安装、默认占用5432端口的PostgreSQL服务。

Windows环境下如果本地装过PostgreSQL,其服务会默认开机自启抢占5432端口,此时你执行-p 5432:5432的端口映射不会抛出显性报错,但实际映射关系不生效。你本地执行psql连接localhost:5432时,流量会直接打到本地运行的PostgreSQL服务上,自然看不到你在容器内部创建的test库。
你可以在当前本地连接的psql会话里执行select inet_server_addr(), inet_server_port(), version();验证,返回的端口、版本信息会和容器内的实例信息不匹配。

解决方法

二选一即可:

方案1:释放5432端口给Docker使用

  • 按下Win+R输入services.msc回车打开Windows服务管理器
  • 在服务列表找到PostgreSQL相关服务,右键选择「停止」,如果不需要本地PostgreSQL开机自启,可以把启动类型修改为「手动」
  • 执行命令删除之前端口映射失效的旧容器:docker rm -f postgres-0
  • 重新启动容器:
docker run --name postgres-0 -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:latest
  • 等待10秒左右待容器内数据库完全启动,再用原命令连接即可看到容器内创建的库。
    注意:如果之前创建test库时没有挂载数据卷做持久化,旧容器删除后test库会一并丢失,需要重新创建。

方案2:换用其他端口映射避免冲突

不需要停本地PostgreSQL服务,直接给容器映射一个不被占用的宿主机端口即可:

  • 先删除旧容器:docker rm -f postgres-0
  • 启动容器时把宿主机端口改成5433(其他未被占用的端口都可以):
docker run --name postgres-0 -e POSTGRES_PASSWORD=password -p 5433:5432 -d postgres:latest
  • 连接时指定5433端口即可连到容器内的实例:
psql -h localhost -p 5433 -U postgres
快速排查技巧

后续遇到类似容器服务访问不符合预期的问题,可以先执行docker port <容器名>查看实际生效的端口映射规则,如果返回为空就说明宿主机对应端口被占用,映射未生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:21:20