首頁 > 後端開發 > Golang > 主體

為什麼我無法從外部連線到 Docker 容器內的 WebSocket 伺服器?

Patricia Arquette
發布: 2024-11-06 13:29:03
原創
505 人瀏覽過

Why Can't I Connect to My WebSocket Server Inside a Docker Container from Outside?

對WebSocket 伺服器的Docker 化進行故障排除

問題:

在以下情況下難以連接到Docker容器中運行的WebSocket 伺服器從容器外部存取它。

伺服器程式碼:

// server.go
func RootHandler(w http.ResponseWriter, r *http.Request) {
    ... (WebSocket handling code) ...
}
登入後複製

Dockerfile:

FROM golang:1.11.4-alpine3.8
... (Build and expose port commands) ...
登入後複製

從容器外部連接到WebSocket伺服器應在客戶端列印「已連線」。

實際錯誤:

客戶端因錯誤而恐慌:「恐慌:讀取tcp [::1]:60328->[::1]:8000 :讀取:連線已被對等方重設。外部存取該主機。

解決方案:

要解決此問題,請將 server.go 中伺服器的監聽位址變更為「:8000」而不是「localhost:8000」。這樣,伺服器將偵聽容器的所有 IP 位址。

// server.go
func RootHandler(w http.ResponseWriter, r *http.Request) {
    ... (WebSocket handling code) ...
}

// main()
server := http.Server{Addr: ":8000"}
... (Rest of server setup) ...
登入後複製
其他資訊:

Docker 透過建立 iptables 規則來公開連接埠將流量轉送到容器的 IP 位址。
  • Docker 容器通常會取得 docker0 網路介面內的 IP 位址。
  • 從容器外部連線時,流量會轉送到容器的 IP 位址,這可能會導致與伺服器的監聽位址不符。

以上是為什麼我無法從外部連線到 Docker 容器內的 WebSocket 伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!