首页 >后端开发 >Golang >尽管 pgAdmin 连接成功,为什么我的 Go 应用程序拒绝连接到我的 Docker Compose Postgres 数据库?

尽管 pgAdmin 连接成功,为什么我的 Go 应用程序拒绝连接到我的 Docker Compose Postgres 数据库?

Susan Sarandon
Susan Sarandon原创
2024-12-31 16:03:10178浏览

Why is my Go application refusing a connection to my Docker Compose Postgres database, despite pgAdmin connecting successfully?

Docker-Compose Postgres 连接被拒绝:解决连接问题

在使用 Postgres 的 Docker-Compose 设置中,您描述了一个问题:可以使用 pg-admin 连接到 Postgres,但在尝试从以下位置连接时遇到连接问题Go。

问题源于您在 Go 代码中引用数据库主机名的方式。您使用 POSTGRES_HOST 作为 postgres,这是 Docker-Compose 配置中 Postgres 的容器/服务名称。但是,在 Go 代码中,您正在连接到数据库,这是数据库服务的实际容器名称。

要解决此问题,您有两个选项:

选项1:更改 Docker-Compose 中的容器名称

将 docker-compose.yaml 文件中数据库服务的名称从 database 更改为postgres。这将使容器名称和您在 Go 代码中使用的主机名匹配。

选项 2:显式主机名字段

或者,您可以添加显式主机名Docker-Compose 配置中数据库服务的字段:

database:
  build: database
  restart: always
  hostname: postgres

这设置数据库容器的主机名到 postgres,它与您在 Go 代码中引用的主机名相匹配。

其他注意事项

此外,您可能需要考虑在 Docker 中创建专用网络 -编写配置以确保容器之间能够安全、高效地通信。操作方法如下:

在 docker-compose.yaml 文件中,为每个应使用专用网络的服务添加一个网络部分,如下所示:

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet

然后,定义docker-compose.yaml 文件末尾的网络:

networks:
  mynet:
    name: my-shared-db-network

这将创建一个名为的新网络您的容器可以使用 my-shared-db-network 进行通信。

通过实施这些解决方案之一,您应该能够在 Docker-Compose 设置中从 Go 成功连接到 Postgres 数据库。

以上是尽管 pgAdmin 连接成功,为什么我的 Go 应用程序拒绝连接到我的 Docker Compose Postgres 数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn