1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker inspect コマンドの使い方|コンテナ・イメージの詳細情報を確認する方法

1
Posted at

ひとことで言うと

# コンテナの全情報をJSONで表示
docker inspect <コンテナ名またはID>

# 特定の項目だけ取り出す(IPアドレスの例)
docker inspect -f '{{.NetworkSettings.IPAddress}}' <コンテナ名>

やりたかったこと / 現象

コンテナの中で何が起きているのか調べたい、コンテナに割り当てられたIPアドレスを知りたい、マウントされているボリュームのパスを確認したい——docker psdocker logs では表示されないこうした詳細情報を探しているときに docker inspect にたどり着く人が多いはずです。

docker inspect はコンテナやイメージ、ネットワーク、ボリュームなど、Dockerが管理するオブジェクトの設定情報をJSON形式で丸ごと出力してくれるコマンドです。情報量が多い分、目的の項目をどう絞り込むかがポイントになります。


環境

  • Docker: 20.10以降で動作確認
  • OS: Linux / macOS / Windows(WSL2)

解決策

1. 基本構文

docker inspect <コンテナ名/ID>
docker inspect <イメージ名/ID>

コンテナ名とイメージ名が重複していない限り、docker inspect は自動的に対象の種類を判別します。明示的に指定したい場合は --type オプションを使います。

docker inspect --type container <名前>
docker inspect --type image <名前>

2. IPアドレスを確認する

docker inspect -f '{{.NetworkSettings.IPAddress}}' <コンテナ名>

デフォルトブリッジネットワーク以外(docker network create で作った独自ネットワークなど)に接続している場合は、以下のように取得します。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <コンテナ名>

3. 環境変数を確認する

docker inspect -f '{{.Config.Env}}' <コンテナ名>

4. マウントされているボリュームを確認する

docker inspect -f '{{.Mounts}}' <コンテナ名>

見やすく整形したい場合はJSON全体を jq に渡すのがおすすめです。

docker inspect <コンテナ名> | jq '.[0].Mounts'

5. ヘルスチェックの状態を確認する

docker inspect -f '{{.State.Health.Status}}' <コンテナ名>

healthy / unhealthy / starting のいずれかが返ります。HEALTHCHECK を定義していないイメージでは <no value> になります。

6. 終了コードを確認する

docker inspect -f '{{.State.ExitCode}}' <コンテナ名>

コンテナが異常終了した原因調査の第一歩として、終了コードの確認はよく行われます。

7. 複数のコンテナをまとめて調べる

docker inspect -f '{{.Name}}: {{.State.Status}}' $(docker ps -aq)

よくあるエラーと対処

Error: No such object: <名前>

コンテナ名やイメージ名のタイプミス、または対象がすでに削除されていることが原因です。docker ps -adocker images で正確な名前を確認してください。

docker ps -a
docker inspect <正しい名前>

template: :1: unexpected "}" in operand

-f--format)で指定するGoテンプレートの構文ミスです。{{ }} の対応や . の位置を確認してください。

# 誤り
docker inspect -f '{{.NetworkSettings.IPAddress' <コンテナ名>

# 正しい
docker inspect -f '{{.NetworkSettings.IPAddress}}' <コンテナ名>

出力結果が空 []

コンテナ名・イメージ名を1つも指定していないか、複数指定した際に該当するものが1つもない場合に発生します。引数を確認してください。

JSONが長すぎて読みにくい

docker inspect の出力はネストが深く、そのまま見ると情報量が多すぎます。jq--format を使って必要な項目だけに絞り込むと読みやすくなります。

docker inspect <コンテナ名> | jq '.[0] | {Name, State, NetworkSettings}'

よくある質問

Q: docker inspectdocker stats の違いは?
docker inspect は設定情報(IPアドレス・環境変数・マウント等)の静的なスナップショットを表示します。一方 docker stats はCPU・メモリ使用率などのリアルタイムなリソース状況を表示するコマンドで、目的が異なります。

Q: コンテナが停止していても docker inspect は使えますか?
使えます。停止中のコンテナでも設定情報や最後の終了コード(State.ExitCode)などを確認できます。ただしネットワーク情報の一部は停止中には取得できません。

Q: --format-f は何が違いますか?
同じオプションの省略形と正式名です。動作に違いはありません。

Q: イメージに対して docker inspect を使うと何がわかりますか?
イメージのレイヤー構成、デフォルトの環境変数、CMD/ENTRYPOINT、公開ポート、作成日時などがわかります。

Q: ネットワークやボリュームにも docker inspect は使えますか?
使えます。docker network inspect <ネットワーク名>docker volume inspect <ボリューム名> のように、対象ごとのサブコマンドとしても実行できます。


関連記事


この記事は errsolved.com にも掲載しています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?