无法从 golang 连接到 docker postgres 容器

Posted

技术标签:

【中文标题】无法从 golang 连接到 docker postgres 容器【英文标题】:Can not connect from golang to docker postgres container 【发布时间】:2017-06-06 19:55:34 【问题描述】:

我为 postgres 启动了 docker 容器

docker run -i -t -v=":/var/lib/postgresql" -p 5432:5432 my_image/postgresql:9.3

并验证它是否可以使用

从主机访问

psql -h my_docker_ip -p 5432 -U pguser -W pgdb // passowrd: pguser

现在我想在我的主机中使用go 连接到容器postgres

import (
    "database/sql"
    _ "github.com/lib/pq"
    "fmt"
)

func main() 
    db, err := sql.Open("postgres", "user=pguser password='pguser' host=192.168.99.100 port=5432 sslmode=verify-full")

    if err != nil 
        fmt.Println(err)
    

    rows, err := db.Query("SELECT * FROM test")
    fmt.Println(rows)


虽然初始化数据库实例引用没有错误,但测试查询本身会打印出来

<nil>

这不应该发生,因为我在运行 go 代码之前创建了表 test 和表 test 中的多行。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

如果它不能Open 它应该失败并且在Open 上返回错误, 啊,我在查询时遇到的错误,x509: cannot validate certificate for 192.168.99.100 because it doesn't contain any IP SANs sql.Open 不检查是否有有效的连接,使用sql.Ping 尝试将disable sslmode 设置为开发阶段 【参考方案1】:

我在 golang 中使用 mysql 客户端时看到了同样的错误:

Failed to connect to database:  x509: cannot validate certificate for 10.111.202.229 because it doesn't contain any IP SANs

https://***.com/a/54636760/8645590 中的解决方案对我有用。

【讨论】:

以上是关于无法从 golang 连接到 docker postgres 容器的主要内容,如果未能解决你的问题,请参考以下文章

无法从本地连接到 mysql docker

如何在Docker环境中启动时,如何从节点服务器连接到postgres

无法从 docker-compose 连接到 docker

无法从 docker 容器连接到数据库 [重复]

无法从节点连接到 docker 中的 mongo 副本集

Flyway 无法从 Docker-Container 连接到 MySQL