Dockerイメージ、コンテナーなどからDockerのすべての主要コンポーネントの詳細ビューを探している場合は、dockerinspectコマンドが最適です。
このチュートリアルでは、デバッグ、トラブルシューティング、または単なる好奇心のために、多くのDockerコンポーネントに関する詳細情報を見つけるための探偵になる方法を学びます。
始めましょう!
前提条件
ステップバイステップでフォローしたい場合は、次のものがあることを確認してください。
- Docker –このチュートリアルでは、Ubuntu18.04.5LTSでDockerv19.03.11を使用します。
- ダウンロードして利用可能なDockerイメージ。このチュートリアルでは、DockerHubで利用可能な最新のNGINXDockerイメージを使用します。
- Dockerホストで実行されている少なくとも1つのコンテナー。
Docker Inspect
を使用したDockerイメージの検査
Docker Inspect
多くの異なるDockerコンポーネントに関する情報を提供できますが、最初に最も人気のあるコンポーネントの1つから始めましょう。画像。画像をダウンロードした場合、その画像に関する情報をどのように確認しますか?調べてみましょう。
Dockerホストに少なくとも1つのイメージがあると仮定して、inspect
を使用します その画像を照会するコマンド。以下のコマンドは、nginx
という画像があることを前提としています。 ホスト上で。
docker image inspect nginx
上記のコマンドを実行すると、その特定の画像に関する多数の情報がJSONを介して返されます。いくつかの注目すべき属性は次のとおりです。
- 画像タグ。
- 画像が作成された時刻。
- Dockerイメージnginxに関連付けられたコンテナのホスト名。
- コンテナが外部ネットワークで利用できるようにするネットワークポート。
- Dockerイメージnginxに属するコンテナに接続されているボリュームにも気付くでしょう。

Dockerネットワークに関する詳細情報の取得
docker inspect
コマンドは、画像やコンテナに関する情報を取得するだけではありません。また、ネットワークにクエリを実行することもできます。 Dockerネットワークを使用すると、コンテナーは、ブリッジネットワーク(プライベートネットワーク)、ホストネットワーク(パブリックネットワーク)、オーバーレイネットワークなど、さまざまな方法で通信できます。
Dockerネットワークを知ることは、アプリケーションの必要に応じていつでも切断してから接続し直すことで、別のDockerネットワークに切り替えることができるため重要です。
まだターミナルにいると仮定します:
1.以下のコマンドを実行します。 docker network ls
コマンドは、Dockerに存在するすべてのネットワークを一覧表示します。ネットワークのIDを見つけるには、このコマンドの出力が必要です。
docker network ls

次に、ネットワークIDをdocker inspect network
に渡します 指図。このコマンドは、以下に示すように、特定のネットワークに関するさまざまな情報を返します。
docker inspect network 4748f122c987
1.ネットワークの種類。
2.ネットワークが使用するサブネットアドレス。
3および4。この特定のネットワークを使用しているすべてのコンテナに関する要約情報。

DockerのGoテンプレートとFormat
を理解する パラメータ
これまで、追加のオプションパラメータを使用せずにDockerinspectコマンドを使用する方法を学習しました。ただし、出力形式を操作する必要がある場合は、--format
の使用を検討してください。 国旗。 --format
パラメータはGoテンプレートを使用して、docker inspect
から返された情報をフィルタリングして表示します 。
join、println、tableなど、さまざまな関数がフォーマットフラグとともに使用されます。それらのいくつかについて説明しましょう!
たとえば、特定のコンテナからの出力からいくつかの値を結合したい場合があります。もしそうなら、join
コマンドはうまく機能します。以下に、join
が表示されます コマンドは文字列を連結します(nginx, -g, daemon off
)各要素が区切り文字(,
)で区切られている 。
docker inspect --format '{{join .Args " , "}}' container_id

価値を活用したいですか? upper
を使用します コマンド。
docker inspect --format "{{upper .Name}}" container_id

format
の使用例はたくさんあります。 パラメータ。
Dockerコンテナのベースイメージ名を見つける
前のセクションでは、すべてのDockerイメージの詳細ビューを取得する方法を説明しました。これには、それらのイメージを使用するコンテナーも含まれます。しかし、コンテナIDをすでに知っていて、それが作成されたイメージをすばやく見つける必要がある場合はどうでしょうか。コンテナIDをdocker inspect
に提供できます 。
特定のコンテナが構築されているイメージの名前を見つけるには、以下のdocker inspect
を実行します。 指図。次のコマンドは、コンテナID(8f34d039fa3a
)を渡します この場合)docker inspect
format
を使用します image
のみを返すパラメータ Config
からの値 JSON出力のノード。
# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a

Config
全体が何であるかを確認できます ノードは以下のようになり、Image
名前の由来。

コンテナのIPアドレス、Macアドレス、およびポートバインディングの検索
コンテナが使用するネットワークを見つける方法はわかっていますが、コンテナが使用するそのネットワーク上のIPアドレスまたはMacアドレス、およびポートバインディングをどのように知ることができますか?ご想像の通り! docker inspect
。
コンテナが使用するIPアドレスを絞り込むには、コンテナIDをdocker inspect
に渡します。 指図。ここでも、format
を使用します 不要なJSONを除外して、探しているものに正確に到達するためのパラメーター。
format
が表示されます 以下のパラメータ引数は、docker inspect
に指示します NetworkSettings
内に埋め込まれた値を返すためだけに →Networks
→IPAddress
range
を使用したJSON属性 属性。 Range属性を使用すると、配列を反復処理して、.
を設定できます。 各配列要素の値。
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

メインのNetworkSettings
が表示されます 下のノードとIPAddress
値はネストされています。

同様に、MACアドレスを見つけるには コンテナのdocker inspect
を使用します 以下に示すcontainerコマンド。
繰り返しになりますが、format
以下のパラメータ引数はrange
を使用します 属性ですが、今回はNetworkSettings
をチェックインしてコンテナのMacアドレスを見つけます →Networks
→Mac address
。
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249

最後に、すべてのコンテナのポートバインディングを確認するには 以下のdocker inspect
を実行します 指図。 format
が表示されます 以下のパラメータ引数はrange
を使用します NetworkSettings
をチェックインして、コンテナのポートバインディングを検索する属性 →HostPort
。
ポートバインディングについて知っておく必要があります。すでに使用されているポートがある場合は、再度使用することはできないためです。そうしないと、ポートがすでに割り当てられていることを示すエラーメッセージがスローされます。
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a

Docker Inspect
を使用してDockerボリュームの詳細ビューを取得する
これまで、画像、コンテナ、ネットワークに関する詳細情報を見つける方法を学びましたが、ストレージについては学びませんでした。それを変えましょう。
チュートリアルに少なくとも1つのマウントされたボリュームがコンテナにアタッチされていることを確認するために、最初にコンテナを作成してストレージボリュームをマウントしましょう。
すでにコンテナにストレージボリュームがマウントされている場合は、この部分をスキップできます。
以下のコマンドは、my_container
という新しいDockerコンテナを作成します 、ポート80をホストに公開します(-p 80:80
)、ホストの / var / container_dirに基づいてボリュームをマウントします Mounted_valというディレクトリ (-v mounted_vol:/var/container_dir
)nginx
を使用する 画像。
docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx
ボリュームがコンテナにマウントされたので、ボリュームの名前をdocker volume inspect
に提供します 。以下では、コマンドがJSON出力を返し、マウントされたストレージボリュームに関する情報のみを提供することに注意してください。
docker volume inspect mounted_vol

結論
これで、docker inspect
を使用できるようになります。 画像、コンテナ、ネットワーキング、ストレージに関する情報のクエリから、さまざまな状況でのコマンド。
docker inspect
をどのように使用する予定ですか 独自のDocker環境に関する情報を照会するには?