Docker は、非常に人気のあるオープン ソースのコンテナ化エンジンです。迅速に構築でき、管理が容易で、アプリケーションの移植性が確保できるため、開発環境や運用環境で広く使用されています。ただし、Docker を使用して Web アプリケーションを構築する場合、ポートが通信できないことは珍しくありません。今日は、Docker によって構築された Web ポートがブロックされる理由と解決策を分析します。
1. 原因分析
Linux システムでは、iptables ファイアウォール サービスがデフォルトで有効になっています。設定していない場合は、 Docker コンテナは外部ネットワークと通信します。したがって、Docker が外部ネットワークとスムーズに通信できるように、ファイアウォールを無効にするかルールを追加できます。以下は参考コマンドです:
ファイアウォールを閉じる: $ sudo service iptables stop
ポートを開く: $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Docker はコンテナを起動すると、ポート マッピングを通じてコンテナ内のポートをホスト上のポートにマップし、コンテナとコンテナ間の通信を実現します。外部ネットワーク。デフォルトでは、コンテナのネットワークは独立しており、内部でのみ通信します。したがって、コンテナ内のポートをマッピングしないと、ポートが通信できなくなる可能性があります。以下はポートをマップするデフォルトの方法です:
$ docker run -p 80:80 image-name
Docker ネットワーク ドライバーの 3 つのタイプは、ブリッジ、ホスト、およびなしです。 Docker コンテナを使用する場合、デフォルトでブリッジ ネットワーク ドライバーが使用され、NAT ネットワークに基づいて仮想ネットワークを形成します。コンテナーが外部ネットワークにアクセスできない場合は、ネットワーク ドライバーが正しく選択されているかどうかを確認する必要がある場合があります。次のコマンドを使用してネットワーク ドライバーを確認できます:
$ docker network ls
Docker がコンテナーを起動した後、これはネットワーク ドライバーに基づいて、一意の IP アドレスを割り当てます。コンテナーの IP アドレスが外部ネットワークにアクセスできない場合は、コンテナーに接続されているネットワーク カードが正しく構成されているかどうかを確認する必要があります。次の例では、コンテナの IP アドレスが 172.17.0.2 であることがわかります:
$ docker Inspection container-name | grep IPAddress
2。
ポート マッピングが正しいかどうかを確認する$ docker port container-name
出力内容は次のようになります:
80/tcp -> 0.0.0.0:80
上記のコマンドは、コンテナ内のポートとホスト上のポートのマッピングを表示できます。
ネットワーク ドライバーが正しく選択されているかどうかを確認します。$ docker Inspection container-name | grep NetworkMode
出力が Bridge の場合、ネットワーク ドライバーが正しく選択されていることを意味します。出力が host または none の場合は、次のように変更できます:
ネットワークの種類をブリッジに変更します:
$ docker run --network Bridge image-name
ファイアウォールがオフになっているか、ルールが正しく設定されているかを確認してください
$ docker run --privileged image-name
コンテナの IP アドレスが正しいかどうかを確認します$ docker detectcontainer -name | grep IPAddress
コンテナの IP アドレスが変更された場合は、次のコマンドを使用して一意の IP アドレスを再割り当てできます:
$ docker run --ip 172.17.0.10 image-name
つまり、Docker によって開始された Web アプリケーション ポートが通信できない場合は、まずこの状況の原因を調査し、次に問題を解決する必要があります。対応する方法。この記事が皆さんのお役に立てれば幸いです。
以上がdocker によって構築された Web ポートがブロックされている場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。