使用Go Gorm连接Docker中PostgreSQL失败问题排查
解决Docker容器间Gorm连接PostgreSQL的端口问题
问题原因
Docker Compose中,服务间的通信依赖容器内部端口,而非宿主机映射的端口。你配置的"6543:5432"是把宿主机的6543端口映射到Postgres容器的5432端口——这个映射是给宿主机(比如你的DBeaver)使用的,容器之间通信时直接用容器内部的5432端口即可。
解决方案
1. 保留Docker Compose的端口映射
无需修改Postgres服务的端口配置,保持原配置:
ports: - "6543:5432"
这样宿主机用6543端口连接Docker里的Postgres,不会和本地已运行的PostgreSQL(占用5432端口)产生冲突。
2. 修改Go代码的DSN配置
将DSN中的端口改为容器内部的5432,而非宿主机映射的6543:
dsn := "host=postgres port=5432 user=postgres password=password dbname=test sslmode=disable timezone=UTC connect_timeout=5"
因为patients-service容器和postgres容器同属Docker Compose的默认网络,直接用服务名postgres就能解析到Postgres容器的IP,且容器内部PostgreSQL始终监听5432端口。
3. DBeaver连接配置
用以下参数连接Docker中的PostgreSQL:
- 主机:
localhost - 端口:
6543 - 用户名:
postgres - 密码:
password - 数据库:
test
这样就能绕过本地的PostgreSQL,直接连接到Docker容器里的实例。
内容的提问来源于stack exchange,提问作者mevoker659
相关产品推荐
相关产品推荐

