実行中のDockerコンテナーのIPアドレスを取得する方法


94

Docker for Macを使用しています。Dockerコンテナーでnodejsベースのマイクロサービスを実行しています。ブラウザを介してノードのマイクロサービスをテストしたい。実行中のDockerコンテナーのIPアドレスを取得するにはどうすればよいですか?


回答:


115

ホストからコンテナーにポートをマッピングしたくない場合は、コンテナーの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>

7
あなたは内部IPについて話しているのですが、それは目前の質問とは何の関係もありません。あなたの答えは読者を混乱させるだけです。IPは、Dockerが実行されているマシンのIPであるためです。それはちょうどですlocalhost:)
デビッド・ガッティ2017

あなたは間違っている。OPは、マイクロサービスが外部からアクセス可能でなければならないことについて何も指定しませんでした。彼は「ブラウザを介したテストノードマイクロサービス」とだけ言ったが、これhttp://172.17.0.2:anyPortはホストから使用する私の提案した方法で行うことができる。もちろん、ホスト上のlocalhostを使用してアクセスする場合は、ポートをマップする必要があります。OPが望むものを確認します。
OscarAkaElvis 2017

3
ホストからコンテナ内の内部IPにアクセスできると言っていますか?それは物理的に不可能です、それは完全に異なるネットワークです。チェックしただけで、はい、Dockerコンテナーの172.17.0.7にアクセスできません。ネットワークスキャナーでホストコンピューターをスキャンすると、すべてのDocker候補を確認できますが、そうではありません。再び。私はそれがうまくいくはずがないことを知っています、あなたが言うことをテストしました(あなたは決して知りません)、それはうまくいきません。それで、あなたの説明には重要な部分が欠けていますか?
David Gatti 2017

コンテナにはホストからアクセスできます。自分で試してみてください...私はあなたにいくつかのヒントを与えます。1.実行コンテナをダウンロードしますdocker run --name struts --rm -i tomcat。2.コンテナのIPを取得します(1つしかない場合):docker inspect struts | grep '"IPAddress"' | head -n 13 http://x.x.x.x:8080. ホストのブラウザで開きます。Apache Tomcat defaultのページを見ることができます。
OscarAkaElvis 2017

1
-pを使用してポートをマッピングせずにコンテナー内のWebアプリにアクセスできませんでした
bilal.haider

22

--formatオプションを使用して、コンテナー情報全体ではなくIPアドレスのみを取得します。

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
Windowsホストでは、単一引用符の代わりに二重引用符を使用します。例:sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Reference:link
Vineet Sajwan


18

最新のDockerエンジンでは、次のコマンドを使用します。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

そして古いエンジンを使用する場合:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

言及され、@ sanyashによるコメントでリンクされているのは、元のOP領域です。
ジェシーチザム

テンプレート解析エラー:テンプレート::1:コマンドで予期しない閉じられていないアクション
gmlvsv


5

フラグでコンテナを開始できます-P。これにより、イメージの公開ポートにランダムなポートが「割り当て」られます。

docker port <container id>ランダムに選択されたポートを見ることができます。その後、を介してアクセスできlocalhost:portます。


2

私の場合、以下は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


-2

そのホストマシンの外部からDockerのIPにアクセスすることはできません。ブラウザが別のマシンにある場合は、-p 8080:8080runコマンドに渡して、ホストポートをコンテナポートにマップする方が適切です。

合格-pすると、ホストポートをコンテナポートにマップでき、プロキシは、そのホストポートのすべてのトラフィックを指定されたコンテナポートに転送するように設定されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.