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
相关产品推荐
相关产品推荐

