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>
sudo ufw allow <port>/tcp
を必要なポートに置き換えてください。開ける。
http://localhost:8080 を通じてホストにアクセスすると、Docker コンテナのポート 80 にアクセスされます。
-p オプションを使用した Docker でのポート マッピングの例です:
docker run -p 8080:80 <image_name>
を実際のイメージに置き換えてください。 own イメージ名。
services: web: build: . ports: - "8080:80"
docker run --network=bridge <image_name>
EXPOSE 80
以上がDocker ポートに ping を送信できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。