首页 > 后端开发 > Golang > 为什么 pgAdmin 连接成功后,我的 Go 应用程序与 Docker Compose Postgres 的连接被拒绝?

为什么 pgAdmin 连接成功后,我的 Go 应用程序与 Docker Compose Postgres 的连接被拒绝?

Patricia Arquette
发布: 2024-12-24 12:17:15
原创
263 人浏览过

Why Does My Go App Get

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

在涉及带有 pg-admin 和 Go 的 Postgres DB 的 docker-compose 设置中,即使 pg-admin 可以成功连接,您也可能会遇到 Go 和 Postgres 之间的连接问题。本文深入探讨了潜在原因并提供了解决方案。

根本原因

该问题是由于数据库连接 URI 中指定的主机名引起的。虽然环境变量指向“postgres”,但 Postgres 的 Docker 容器/服务名称是“database”。这种差异会导致 Go 无法建立连接。

解决方案

有两种可能的解决方案:

选项 1:更改容器名称

修改 Docker compose 文件以更改服务名称

database:
  build: database
  restart: always
  hostname: postgres
登录后复制
登录后复制

选项 2:使用显式主机名字段

或者,您可以向 Postgres 服务添加显式主机名字段配置:

database:
  build: database
  restart: always
  hostname: postgres
登录后复制
登录后复制

这些解决方案中的任何一个都将确保主机名连接 URI 与 Postgres 容器的名称匹配,允许 Go 建立成功的连接。

其他注意事项

为了使多个容器服务有效通信,您可以考虑创建专用的网络。为此,请为同一网络上所需的每个服务添加“网络”部分。

database:
  # ...

  networks:
    - mynet

backend:
  # ...

  networks:
    - mynet
登录后复制

最后,在撰写文件的末尾定义网络:

networks:
  mynet:
    name: my-shared-db-network
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板