首頁 >後端開發 >Golang >為什麼 pgAdmin 連線成功後,我的 Go 應用程式與 Docker Compose Postgres 的連線被拒絕?

為什麼 pgAdmin 連線成功後,我的 Go 應用程式與 Docker Compose Postgres 的連線被拒絕?

Patricia Arquette
Patricia Arquette原創
2024-12-24 12:17:15275瀏覽

Why Does My Go App Get

Docker-Compose Postgres 連接被拒絕:解決連接問題

在涉及帶有pg-admin 和Go 的Postgres DB 的docker-DB 的docker-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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn