ホームページ  >  記事  >  バックエンド開発  >  クライアントが Docker コンテナ内の WebSocket サーバーに接続できないのはなぜですか?

クライアントが Docker コンテナ内の WebSocket サーバーに接続できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 22:26:02262ブラウズ

Why Can't My Client Connect to My WebSocket Server Inside a Docker Container?

WebSocket サーバーの Docker 化のトラブルシューティング

問題: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。