首頁 >後端開發 >Golang >為什麼我的gRPC客戶端無法連接到Docker容器中的Go伺服器?

為什麼我的gRPC客戶端無法連接到Docker容器中的Go伺服器?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-21 11:55:12889瀏覽

Why Does My gRPC Client Fail to Connect to a Go Server in a Docker Container?

連接到在本地Docker 容器中運行的Go GRPC 服務器

問題:

嘗試時將gRPC 用戶端連接到在Docker 容器中執行的Go gRPC伺服器時,會發生錯誤:遇到:

transport: http2Client.notifyError got notified that the client transport was broken EOF.
FATA[0000] rpc error: code = Internal desc = transport is closing

解決方案:

當gRPC 伺服器設定為偵聽特定主機名稱或IP 位址(例如localhost )時,會出現此問題。在 Docker 中,本機主機位址僅指源自容器本身內部的環回連線。

要解決此問題,應將伺服器配置為偵聽容器的所有可用 IP 位址。這可以透過將監聽端點從:

endpoint := "localhost:51672"

更改為:

endpoint := ":51672"

透過使用「:」作為監聽位址,伺服器將綁定到所有介面和IP容器內的位址,允許轉送和建立外部連線。

其他資訊:

  • Docker 建立 iptables 規則以將連線轉送到容器內公開的連接埠。
  • 指派給容器的 IP 位址可以使用指令 ip addr ls 檢視。
  • 在容器內運行客戶端時,可以成功連接到伺服器,因為客戶端和伺服器都在同一網路中介面。

以上是為什麼我的gRPC客戶端無法連接到Docker容器中的Go伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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