Docker を使用している場合、Docker コンテナのポートがホストと通信できないことが時々あります。これには、ネットワーク構成の問題、セキュリティ設定の問題、ファイアウォールの問題など、さまざまな理由が考えられます。この記事では、Docker ポートが ping できない問題を解決する方法と、この問題の発生を防ぐ方法について説明します。
Docker ネットワーク構成を理解する
問題の解決に深く入る前に、Docker ネットワーク構成を理解する必要があります。 Docker には、ブリッジ、ホスト、なしという 3 つの基本的なネットワーク構成モードがあります。デフォルトでは、Docker はブリッジ モードを使用して IP アドレスをコンテナーに割り当て、コンテナーを仮想サブネットに接続します。これは、コンテナの IP アドレスがホストの IP アドレスとは異なることを意味します。
ネットワーク通信に Docker コンテナを使用する場合、ホストとコンテナの間でネットワーク アドレス変換 (NAT) が必要です。これは、コンテナからの攻撃からホストを保護するため、実際には優れたセキュリティ対策です。
ただし、これはコンテナ内のポートがホストと直接通信できないことも意味します。これは、コンテナ内のポートは通常、コンテナのサブネットに割り当てられており、ホスト上ではこのサブネットが表示されないため、コンテナのポートに直接アクセスできないためです。
Docker ポートが ping できない問題の解決
Docker ネットワーク構成の基本を理解したので、Docker ポートが ping できない問題の解決に着手できます。ピングする。
まず、Docker コンテナの IP アドレスを確認する必要があります。次のコマンドを使用して、実行中のコンテナを一覧表示できます:
docker ps
コンテナを一覧表示した後、次のコマンドを使用してコンテナの IP アドレスを取得できます:
docker inspect <container_id>
# を必ず置き換えてください。 ##container_id は独自のコンテナの ID です。
docker logs <container_id>ログに「listening on 298c9bd6ad6e8c821dc63aa0473d6209」のようなメッセージが表示された場合、コンテナがサービスを実行していることを意味します。対応するサービス。 次に、ファイアウォールがホストとコンテナー間の通信をブロックしているかどうかを確認する必要があります。 Ubuntu や CentOS などの一般的な Linux ディストリビューションを実行している場合、デフォルトでファイアウォールが有効になっています。ホストとコンテナー間の通信を可能にするには、Docker コンテナーのポートを開く必要があります。 Ubuntu を例として、ポートを開く例を次に示します。
sudo ufw allow <port>/tcp
298c9bd6ad6e8c821dc63aa0473d6209 を必要なポートに置き換えてください。開ける。
http://localhost:8080 を通じてホストにアクセスすると、Docker コンテナのポート 80 にアクセスされます。
-p オプションを使用した Docker でのポート マッピングの例です:
docker run -p 8080:80 <image_name>
ce03ab434069df82ad6c460dc73e6e7f を実際のイメージに置き換えてください。 own イメージ名。
services: web: build: . ports: - "8080:80"次に、Docker のブリッジ ネットワーク モードを使用して、すべてのコンテナが同じネットワーク上にあることを確認できます。これにより、コンテナー同士が通信できるようになり、ホストがコンテナーと通信できるようになります。以下はブリッジ モードの使用例です:
docker run --network=bridge <image_name>最後に、Dockerfile で公開する必要があるポートを指定できます。これにより、Docker コンテナが自動的に正しいポートを開くことができるようになります。以下は、Dockerfile で公開する必要があるポートを指定する例です。
EXPOSE 80結論Docker を使用する場合、ポートに ping できないという問題がよく発生します。 。ただし、Docker のネットワーク構成をマスターし、いくつかの予防措置を講じている限り、この状況の発生を回避し、問題を時間内に解決することができます。 Docker を使用しているときにポートに ping ができないという問題が発生した場合に、この記事が役立つことを願っています。
以上がDocker ポートに ping を送信できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。