Docker for Macを使用しています。Dockerコンテナーでnodejsベースのマイクロサービスを実行しています。ブラウザを介してノードのマイクロサービスをテストしたい。実行中のDockerコンテナーのIPアドレスを取得するにはどうすればよいですか?
Docker for Macを使用しています。Dockerコンテナーでnodejsベースのマイクロサービスを実行しています。ブラウザを介してノードのマイクロサービスをテストしたい。実行中のDockerコンテナーのIPアドレスを取得するにはどうすればよいですか?
回答:
ホストからコンテナーにポートをマッピングしたくない場合は、コンテナーのdocker range ipに直接アクセスできます。この範囲は、デフォルトではホストからのみアクセスされます。コンテナネットワークデータを確認するには、次のようにします。
docker inspect <containerNameOrId>
おそらくフィルタリングする方が良いでしょう:
docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
通常、デフォルトのDocker IP範囲は172.17.0.0/16
です。すべてが正常で、特別なネットワークオプションを指定しなかった場合172.17.0.1
、ホストは最初のコンテナであるはず172.17.0.2
です。
編集 「bashトリック」の代わりにdocker機能を使用する別のよりエレガントな方法:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
localhost
:)
http://172.17.0.2:anyPort
はホストから使用する私の提案した方法で行うことができる。もちろん、ホスト上のlocalhostを使用してアクセスする場合は、ポートをマップする必要があります。OPが望むものを確認します。
docker run --name struts --rm -i tomcat
。2.コンテナのIPを取得します(1つしかない場合):docker inspect struts | grep '"IPAddress"' | head -n 1
3 http://x.x.x.x:8080
. ホストのブラウザで開きます。Apache Tomcat defaultのページを見ることができます。
--format
オプションを使用して、コンテナー情報全体ではなくIPアドレスのみを取得します。
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
最新のDockerエンジンでは、次のコマンドを使用します。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
そして古いエンジンを使用する場合:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
コンテナ内で取得したい場合は、
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
私の場合、以下はMacで動作しました:
MacでコンテナIPに直接アクセスできませんでした。localhost
ポート転送で使用する必要があります。たとえば、ポートが8000の場合、http://localhost:8000
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workaroundsを参照してください
元の答えは次のとおりです:https : //github.com/docker/for-mac/issues/2670#issuecomment-371249949