Docker を使用してアプリケーション環境を構築すると、アプリケーションが Docker で起動されるが、ホスト上の指定されたポートからアクセスできないという問題が発生する可能性があります。
この問題は、実際には Docker のポート バインド メカニズムが原因で発生します。 Docker コンテナ内のアプリケーションは、デフォルトでコンテナの IP アドレスにバインドされており、この IP アドレスを介してホストにアクセスすることはできません。したがって、ホスト上のアプリケーションが Docker コンテナ内のアプリケーションにアクセスできるように、コンテナ内のポートをホストにマップするには、ポート マッピングが必要です。
一般的なポート マッピング方法には、静的ポート マッピングと動的ポート マッピングの 2 つがあります。
静的ポート マッピングとは、Docker コンテナ内のポートをホスト上の指定されたポートにマッピングすることを指します。たとえば、コンテナ内のポート 80 をホスト上のポート 8080 にマッピングします。このマッピング方法は、Docker がコンテナーを開始するときに構成できます。例:
$ docker run -p 8080:80 nginx
このコマンドは、nginx コンテナーを開始し、コンテナーのポート 80 をホスト上のポート 8080 にマップすることを意味します。
動的ポート マッピングとは、Docker が空いているホスト ポートを自動的に割り当て、コンテナ内のポートをホスト ポートにマッピングすることを意味します。このメソッドは、コロン (:) を使用して実現できます。例:
$ docker run -p 80 nginx
このコマンドは、nginx コンテナーを起動し、コンテナーのポート 80 を空いているホスト ポートにマップすることを意味します。
ただし、上記のコマンドを使用した後でも、ホストが Docker コンテナ内のアプリケーションにアクセスできない場合があります。これはなぜですか?
一般的な理由は、ホスト上のこのポートを占有しているアプリケーションがすでに存在することです。 Docker はポートが利用可能かどうかを確認し、ポートが占有されている場合は起動に失敗します。この問題を解決するには、ホスト上のポートを占有するアプリケーション構成を変更するか、Docker コンテナ内のポートをホスト上の他の使用可能なポートにマップします。
もう 1 つの考えられる理由は、ファイアウォールまたはその他のネットワーク セキュリティ メカニズムがホストと Docker コンテナ間の通信をブロックしていることです。 Linux システムを使用している場合は、iptables ルールを表示することで、ファイアウォールによってブロックされているかどうかを確認できます。ブロックされている場合は、iptables ルールを変更して、ホストと Docker コンテナー間の通信を許可できます。
上記の 2 つの理由に加えて、不適切なネットワーク構成、Docker 構成エラーなど、Docker リスニング ポートにアクセスできない原因となる可能性のある他の多くの理由が考えられます。このような問題が発生した場合は、状況を注意深く分析し、原因を 1 つずつ調査する必要があります。
つまり、Docker リスニング ポートにアクセスできないという問題を迅速に解決するには、ポート マッピング設定、ネットワーク セキュリティ メカニズム、ファイアウォールなどを包括的に考慮して分析する必要があります。
以上がdocker listenポートにアクセスできない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。