問題:
伺服器程式碼:
// 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 容器內的 WebSocket 伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!