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

Podman部署PostgreSQL后无法连接的问题求助

Podman部署PostgreSQL后无法连接的问题求助

问题分析与解决方案

嘿,我看了你的问题,核心问题出在端口映射的配置上!

PostgreSQL官方镜像默认监听的端口是5432,而你在Podman启动命令里把主机的50001端口映射到了容器内的5001端口——但容器里的Postgres根本没在5001端口运行啊!这就导致你的连接请求发过去之后,容器里没有服务在对应端口响应,自然会出现unexpected EOF的报错。

修正步骤:

1. 停止并删除现有PostgreSQL容器(若无需保留数据)

podman stop mypostgres
podman rm mypostgres

2. 用正确的端口映射重新启动容器

把容器内的端口改成Postgres默认的5432,主机端口可以继续用50001,也可以换成你偏好的其他端口:

podman run --name mypostgres -p 50001:5432 -e POSTGRES_DB=contactsdb -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin123 -d postgres

3. 复用正确的连接代码

你的Go连接代码里的端口配置是对的(和主机映射端口50001一致),可以直接使用,建议补充打印错误详情方便后续排查:

dsn:="host=localhost user=admin password=admin123 dbname=contactsdb port=50001"

db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})

if err!=nil{
    fmt.Println("Could not Connect")
    fmt.Println("Connection error detail:", err) // 新增:打印具体错误信息
} else{
    fmt.Println("Successfully connected",db)
}

可选:自定义容器内Postgres端口(非必要)

如果你确实需要让容器内的Postgres跑在5001端口,可以通过环境变量+启动参数实现:

podman run --name mypostgres -p 50001:5001 -e POSTGRES_DB=contactsdb -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin123 -e POSTGRES_PORT=5001 -d postgres -p 5001

不过这种配置没必要,用默认端口更省心。

验证方法

容器启动后,执行podman logs mypostgres查看日志,确认Postgres正常监听预期端口,日志里会出现类似内容:

listening on IPv4 address "0.0.0.0", port 5432

看到这条日志后再尝试连接,应该就能成功啦!


备注:内容来源于stack exchange,提问作者Scáthach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:38:10