問題: Docker コンテナーの外部のクライアントからコンテナー内のサーバーへの WebSocket 接続を確立することが困難です。
コードでは http.Server{Addr: "localhost:8000"} を使用しています。これにより、コンテナ内のループバック インターフェイス (127.0.0.1) をリッスンするサーバーが制限されます。クライアントはコンテナの外部にあるため、このアドレスに接続できません。
解決策:
この問題を解決するには、サーバーのリスニング アドレスを http.Server として指定します。 {Addr: ":8000"}。コンテナ内で使用可能なすべての IP アドレスをリッスンするようにサーバーに指示します。
追加情報:
ポートが公開されている場合Docker コンテナーの場合、Docker はホスト マシンからコンテナーにトラフィックを転送するための iptables ルールを作成します。これらのルールにより、リクエストがコンテナ内の正しい IP アドレスとポートに到達することが保証されます。これらのルールは、次のコマンドを使用して表示できます。
iptables -n -L iptables -t nat -n -L
リッスン アドレスを調整することで、サーバーは Docker コンテナ外のクライアントからの WebSocket 接続を受け入れることができ、クライアント間の通信が可能になります。
以上がクライアントが Docker コンテナ内の WebSocket サーバーに接続できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。