ホームページ  >  記事  >  運用・保守  >  Docker ポートに ping を送信できません

Docker ポートに ping を送信できません

WBOY
WBOYオリジナル
2023-05-13 13:12:371247ブラウズ

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 コンテナが必要なサービスを実行しているかどうかを確認する必要があります。次のコマンドを使用して、コンテナがサービスを実行しているかどうかを確認できます:

docker logs <container_id>

ログに「listening on 298c9bd6ad6e8c821dc63aa0473d6209」のようなメッセージが表示された場合、コンテナがサービスを実行していることを意味します。対応するサービス。

次に、ファイアウォールがホストとコンテナー間の通信をブロックしているかどうかを確認する必要があります。 Ubuntu や CentOS などの一般的な Linux ディストリビューションを実行している場合、デフォルトでファイアウォールが有効になっています。ホストとコンテナー間の通信を可能にするには、Docker コンテナーのポートを開く必要があります。

Ubuntu を例として、ポートを開く例を次に示します。

sudo ufw allow <port>/tcp

298c9bd6ad6e8c821dc63aa0473d6209 を必要なポートに置き換えてください。開ける。

最後に、Docker コンテナのポートがホストにマッピングされているかどうかを確認する必要があります。 Docker では、「ポート マッピング」を使用して、コンテナのポートをホストのポートにマッピングできます。たとえば、コンテナのポート 80 をホストのポート 8080 にマッピングできます。このように、

http://localhost:8080 を通じてホストにアクセスすると、Docker コンテナのポート 80 にアクセスされます。

これは、

-p オプションを使用した Docker でのポート マッピングの例です:

docker run -p 8080:80 <image_name>

ce03ab434069df82ad6c460dc73e6e7f を実際のイメージに置き換えてください。 own イメージ名。

Docker ポートに ping できない問題の防止

不安定な Docker ポートに ping できない問題を解決することに加えて、 Docker コンテナは地上通信を正常に動作させることができます。

まず、Docker Compose ファイルでポートを指定できます。これにより、手動操作が効果的に削減され、開発から実稼働環境の展開までの時間が短縮されます。 Docker Compose ファイルでポートを指定する例を次に示します。

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

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