首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从golang应用程序连接到docker postgres

问从golang应用程序连接到docker postgres
EN

Stack Overflow用户
提问于 2021-04-20 21:09:39
回答 1查看 161关注 0票数 0

我正在尝试从golang代码连接到docker postgres数据库。用于创建postgres容器的命令:docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password --name my-postgres -p 5432:5432 postgres,用于创建我运行的数据库:

代码语言:javascript
复制
PS C:\Users\Aylin\Desktop\farmers> docker exec -it my-postgres bash
root@8969058907f8:/# psql -U postgres
psql (13.2 (Debian 13.2-1.pgdg100+1))
Type "help" for help.

postgres=# CREATE DATABASE test_db;
CREATE DATABASE
postgres=# \q

我可以从pgadmin docker容器:docker run --rm -p 5050:5050 thajeztah/pgadmin4连接到此数据库,使用docker inspect my-postgres命令返回的IP地址作为pgAdmin 4中新服务器的主机名/地址

代码语言:javascript
复制
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2", -> host address

但是,当我尝试使用相同的参数从应用程序连接到数据库时,我得到了以下错误:

代码语言:javascript
复制
[2021-04-20 17:04:43]  sql: database is closed 
dial tcp 172.17.0.2:5432: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Go代码:

代码语言:javascript
复制
const (
    host     = "172.17.0.2"
    user     = "postgres"
    password = "password"
    dbname   = "test_db"
    port     = 5432
)

func FetchConnection() *gorm.DB {

    psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
        "password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)

    db, err := gorm.Open("postgres", psqlInfo)
}

我怎样才能让这段代码工作呢?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-04-20 21:30:51

一旦您使用docker run -p选项启动了一个容器,对于非容器进程,它看起来就像侦听该端口的任何其他服务器进程一样。

如果:

  • 主机进程和Docker容器在同一主机(或同一VM)上运行;
  • 您已使用正确的-p HOST:CONTAINER端口映射启动了容器;
  • 您没有运行Docker工具箱或在VM

中运行Docker

然后,主机进程可以使用localhost作为主机名和第一个-p端口号来访问容器进程。

切勿使用docker inspect或其他方式查找容器内网IP地址。它在大多数常见设置中都是无法访问的(仅当您在同一本机Linux主机上时才有效;不能从其他主机、虚拟机或MacOS或Windows上访问),并且从不需要。类似地,您通常不需要使用docker exec或其他调试工具来访问数据库,因为您可以使用像psql这样的普通客户机与发布的端口通信。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67179620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档