問題:
次の場合に、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: 読み取り: ピアによって接続がリセットされました。」
原因:
サーバーはコンテナ内のローカルホスト (127.0.0.1) でリッスンしていますが、コンテナの外部からはアクセスできません。
解決策:
この問題を解決するには、server.go のサーバーのリッスン アドレスを「localhost:8000」ではなく「: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 コンテナ内の WebSocket サーバーに外部から接続できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。