首頁 >後端開發 >Golang >儘管 pgAdmin 連線成功,為什麼我的 Go 應用程式拒絕連線到我的 Docker Compose Postgres 資料庫?

儘管 pgAdmin 連線成功,為什麼我的 Go 應用程式拒絕連線到我的 Docker Compose Postgres 資料庫?

Susan Sarandon
Susan Sarandon原創
2024-12-31 16:03:10179瀏覽

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