近年、コンテナ化テクノロジーの人気が高まっています。その中でも、Docker は最も人気のあるコンテナ化ソリューションの 1 つとして、開発環境と本番環境の両方で広く使用されています。ただし、Docker を使用すると、マップされたポートにアクセスできないという問題が発生することがありますので、この記事ではこの問題とその解決策について詳しく説明します。
Docker コンテナを実行する場合、-p
または --publish
オプションを使用してコンテナ内のポートをマッピングできます。ポート上のホストに送信します。たとえば、次のコマンドを使用して、コンテナ内のポート 8080 をホスト上のポート 8000 にマップできます。
docker run -d -p 8000:8080 myimage
ただし、場合によっては、マップされたポートにアクセスできないことがわかります。たとえば、上記の例では、http://localhost:8000
を通じてコンテナ内のアプリケーションにアクセスできない可能性があります。
この問題を解決するには、まず原因を分析する必要があります。この問題には主に次のような理由があります:
ポートをマップするとき、実際にはコンテナ内のポートをホストにバインドします。 start ではない場合、ポートをバインドできません。次のコマンドでコンテナのステータスを確認できます:
docker ps -a
ステータスが Exited
の場合、コンテナが実行されていないことを意味します。次のコマンドでコンテナを起動する必要があります。コマンド:
docker start <container_name>
ホストのポートを介してアプリケーションにアクセスできない場合があります。これは、ホストのファイアウォールがアクセスを制限していることが原因である可能性があります。この問題は、ファイアウォール ルールをオフにするか変更することで解決できます。
-p
オプションを使用する場合、ホスト ポートがすでに占有されている場合、コンテナのポートをホストにバインドできません。次のコマンドを使用してポートの占有を確認できます。
sudo lsof -i :<port>
次に、ポートを占有しているプロセスを見つけて、プロセスを閉じるか、そのポートを変更します。
場合によっては、コンテナ内でアプリケーション監視用の IP アドレスを設定している可能性がありますが、この IP アドレスが正しくないため、アクセスできなくなります。アプリケーション。アプリケーションがすべての IP アドレスをリッスンするか、リッスンする IP アドレスが正しく設定されていることを確認する必要があります。
上記の問題については、次の解決策があります。
コンテナが起動しない場合は、コンテナを起動する必要があります。次のコマンドでコンテナにアクセスします。
docker start <container_name>
次のコマンドでファイアウォール ルールを確認できます:
sudo iptables -L
ルールによってアクセスが制限されていることがわかった場合場合は、次のコマンドを使用してファイアウォールを無効にできます。
sudo service iptables stop
または、ファイアウォール ルールを変更して、対応するポートへのアクセスを許可します。
ホスト ポートがすでに占有されている場合は、ポート マッピングを変更して、空いているポートを見つける必要があります。
コンテナ内のアプリケーションによって監視されている IP アドレスが間違っている場合は、アプリケーションがすべての IP アドレスを監視するか、リスニング IP アドレスを正しく設定していることを確認する必要があります。たとえば、アプリケーションのリスニング アドレスを 0.0.0.0
に設定すると、すべての IP アドレスを監視できます。
マップされたポートにアクセスできないことは、Docker を使用するときによくある問題ですが、問題の根本原因を見つけて適切な解決策を講じれば、簡単に解決できます。この記事の導入を通じて、読者はそのような問題に対処する方法を学び、Docker を使用する経験とスキルをさらに向上させたと思います。
以上がdocker がマップされたポートにアクセスできない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。