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中文网其他相关文章!