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

如何用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 to host=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 to host=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环境):

    1. 查看容器IP:
      docker inspect <容器ID或名称> | grep "IPAddress"
      
    2. 修改DNS中的host字段,例如:host=172.17.0.2 user=jose password=mysecretpassword dbname=gorm port=5432
  • 确认端口映射配置
    确保容器启动时添加了-p 5432:5432参数,将容器的5432端口映射到宿主机的5432端口,否则应用无法通过宿主机端口访问数据库。

  • 检查PostgreSQL的访问控制配置
    若上述步骤无效,需确认容器内pg_hba.conf允许远程连接:

    1. 进入容器:
      docker exec -it <容器ID或名称> bash
      
    2. 编辑/var/lib/postgresql/data/pg_hba.conf,添加或修改条目:
      host    all             all             0.0.0.0/0               scram-sha-256
      
    3. 重启容器使配置生效:
      docker restart <容器ID或名称>
      

内容的提问来源于stack exchange,提问作者Jose Gelimer Gomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:32