如何用Gorm连接PostgreSQL?Docker环境连接失败求助
我的Go应用无法连接Docker中的PostgreSQL,报错信息如下:
2022/12/13 11:04:29 C:/Users/Jose Gomez/Desktop/GoPrj/go-gorm-postgresql/db/connection.go:15
[error] failed to initialize database, got error failed to connect tohost=localhost user=jose database=gorm: failed SASL auth (FATAL: la autentificaci�n password fall� para el usuario �jose� (SQLSTATE 28P01))
2022/12/13 11:04:29 failed to connect tohost=localhost user=jose database=gorm: failed SASL auth
(FATAL: la autentificaci�n password fall� para el usuario �jose� (SQLSTATE 28P01))
exit status 1
数据库连接代码:
package db import ( "log" "gorm.io/driver/postgres" "gorm.io/gorm" ) var DNS = "host=localhost user=jose password=mysecretpassword dbname=gorm port=5432" var DB *gorm.DB func DBConnection() { var error error DB, error = gorm.Open(postgres.Open(DNS), &gorm.Config{}) if error != nil { log.Fatal(error) } else { log.Println("DB Conectada!!!") } }
验证容器启动参数的账号密码
检查PostgreSQL容器启动时是否正确设置了环境变量,确保POSTGRES_USER=jose、POSTGRES_PASSWORD=mysecretpassword、POSTGRES_DB=gorm与代码中的配置一致。正确的启动命令示例:docker run -d -p 5432:5432 -e POSTGRES_USER=jose -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_DB=gorm postgres如果启动时未指定这些变量,默认用户是
postgres,需调整代码中的用户参数,或重新启动容器设置正确变量。修正连接主机地址
若在宿主机运行Go应用,localhost可能无法访问Docker容器内的PostgreSQL(除非使用host网络模式),需替换为容器IP或host.docker.internal(Windows/macOS环境):- 查看容器IP:
docker inspect <容器ID或名称> | grep "IPAddress" - 修改DNS中的
host字段,例如:host=172.17.0.2 user=jose password=mysecretpassword dbname=gorm port=5432
- 查看容器IP:
确认端口映射配置
确保容器启动时添加了-p 5432:5432参数,将容器的5432端口映射到宿主机的5432端口,否则应用无法通过宿主机端口访问数据库。检查PostgreSQL的访问控制配置
若上述步骤无效,需确认容器内pg_hba.conf允许远程连接:- 进入容器:
docker exec -it <容器ID或名称> bash - 编辑
/var/lib/postgresql/data/pg_hba.conf,添加或修改条目:host all all 0.0.0.0/0 scram-sha-256 - 重启容器使配置生效:
docker restart <容器ID或名称>
- 进入容器:
内容的提问来源于stack exchange,提问作者Jose Gelimer Gomez

