Docker + Golang中的lib/pq出现"dial tcp 127.0.0.1:5432: connect: connection refused"错误

4

sql.Open() 不会报错:

if db, err = sql.Open("postgres", url); err != nil {
    return nil, fmt.Errorf("Postgres connect error : (%v)", err)
}

但是db.Ping()会报错:

if err = db.Ping(); err != nil {
    return nil, fmt.Errorf("Postgres ping error : (%v)", err)
}

由于lib / pq连接字符串无法使用分离的连接参数从docker容器内连接,因此出现了问题。

例如:

url := fmt.Sprintf("user=%v password=%v host=%v port=%v dbname=%v",
    rs.conf.Redshift.User,
    rs.conf.Redshift.Password,
    rs.conf.Redshift.Host,
    rs.conf.Redshift.Port,
    rs.conf.Redshift.DB)

顺便说一下,您不必关闭问题,我们也并不是在说你做错了什么,但我要说的是,您所描述的并不是有效的调试技巧。如果需要,可以进入聊天室。请在看到此评论后将其标记为“无需再用”,以保持这个问答干净整洁。 - Shepmaster
@Shepmaster,我在这里:https://meta.stackoverflow.com/questions/334761/stack-overflow-chat-asks-me-to-log-in-but-i-am-already-logged-in#comment729892_334761 我的运气现在不错。 - Mikeumus
看起来很奇怪。你好像有一些奇怪的残留账户 https://chat.stackoverflow.com/users/244193/mikeumus - Shepmaster
1个回答

11

使用连接字符串作为URL可以正常工作:

    url := fmt.Sprintf("postgres://%v:%v@%v:%v/%v?sslmode=disable",
        pql.conf.Postgres.User,
        pql.conf.Postgres.Password,
        pql.conf.Postgres.Host,
        pql.conf.Postgres.Port,
        pql.conf.Postgres.DB)

请查看lib/pq的文档: https://godoc.org/github.com/lib/pq

我因此被困了一天以上,感谢 Nikolay Sandalov 在 GitHub 上的评论帮我解决了问题: https://github.com/coreos/clair/issues/134#issuecomment-491300639

谢谢你,Nikolay ‍♂️


1
对我有用,从两个账户中相加=) - mondayguy
2
运行得非常顺利。 - kokemomuke
对于那些使用Docker的人来说,不要使用HOST,而是使用: host.docker.internal - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接