目次
Docker inspect 入門:コンテナとイメージの詳細情報を確認する(-f 形式の例)
docker inspect は Docker オブジェクトの設定と状態を JSON 形式で表示します。対象はコンテナ、イメージ、Volume、ネットワークです。
構文
docker inspect [オプション] 名前またはID [名前またはID...]
| オプション | 説明 |
|---|---|
-f, --format テンプレート | Go テンプレートを使って必要な部分だけを取得します。または json を指定します |
--type 種類 | オブジェクトの種類を指定します:container、image、volume、network など(名前が重複する場合に使用) |
-s, --size | コンテナ:サイズも同時に表示します |
全出力
$ docker inspect web | head -n 12
[
{
"Id": "1ec4fdc5c592b09b64e8f28869c37f89ab17163f88bfcb09e82815a44b0e1164",
"Created": "2026-10-13T05:28:35.05807319Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
"State": {
"Status": "running",
全出力は数百行に及びます。実際にはほとんどの場合、-f を付けて必要なフィールドだけを取得します。
-f テンプレート:よく使う検索
以下では、起動時に -e APP_MODE=demo を設定した web という名前の nginx コンテナを調べます。
$ docker inspect -f "{{.State.Status}} {{.State.StartedAt}}" web
running 2026-10-13T05:28:40.584115149Z
$ docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" web
172.18.0.2
$ docker inspect -f "{{json .Config.Env}}" web
["APP_MODE=demo","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.30.5","PKG_RELEASE=1","DYNPKG_RELEASE=1","NJS_VERSION=1.0.1","NJS_RELEASE=1","ACME_VERSION=0.4.1"]
$ docker inspect -f "{{.Config.Image}} {{.HostConfig.RestartPolicy.Name}}" web
nginx:1.30-alpine no
| 確認したい情報 | テンプレート |
|---|---|
| 状態と起動時刻 | {{.State.Status}} {{.State.StartedAt}} |
| 終了コード、メモリ不足かどうか | {{.State.ExitCode}} {{.State.OOMKilled}} |
| IP アドレス | {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} |
| 環境変数 | {{json .Config.Env}} |
| 使用中のイメージ、再起動ポリシー | {{.Config.Image}} {{.HostConfig.RestartPolicy.Name}} |
| マウント | {{json .Mounts}} |
| ポートの割り当て | {{json .NetworkSettings.Ports}} |
| ヘルスチェックの結果 | {{json .State.Health}} |
| ホスト上の PID | {{.State.Pid}} |
テンプレートの構文:
{{.フィールド.子フィールド}}:値を 1 つ取得します。{{json .フィールド}}:全体(配列やオブジェクト)を JSON で出力します。{{range .リスト}}...{{end}}:リストまたはオブジェクトの各項目を順に処理します。
Docker 29 での変更:以前のチュートリアルでよく見かける
{{.NetworkSettings.IPAddress}}は削除されており、実行するとtemplate parsing error: ... map has no entry for key "IPAddress"が表示されます。上の表にあるrangeの書き方を使ってください。
イメージ、Volume、ネットワーク
$ docker inspect -f "{{.Config.Cmd}} {{.Config.Entrypoint}}" nginx:1.30-alpine
[nginx -g daemon off;] [/docker-entrypoint.sh]
$ docker inspect -f "{{.Architecture}} {{.Os}} {{.Size}}" nginx:1.30-alpine
amd64 linux 92750711
$ docker volume create v1
v1
$ docker inspect -f "{{.Mountpoint}}" v1
/var/lib/docker/volumes/v1/_data
$ docker inspect --type network -f "{{range .IPAM.Config}}{{.Subnet}}{{end}}" bridge
172.18.0.0/16
$ docker volume rm v1
v1
- イメージの
.Config.Cmdと.Config.Entrypointはデフォルトの起動コマンドです。.Architectureは CPU アーキテクチャ、.Sizeはバイト数です(92750711 は約 92.8 MB)。 - Volume の
.Mountpointは、Docker ホスト上にあるデータの実際の場所です。Docker Desktop ではこのパスは仮想マシン内にあるため、Windows や macOS から直接開くことはできません。 --type networkはネットワークの検索を指定し、.IPAM.Configはサブネットの設定を示します。
関連する章
- docker ps:
--formatも同じテンプレート構文を使います - ネットワークとコンテナの接続
- 内部の仕組み:
.State.Pidを使ってホスト上でコンテナのプロセスを見つけます
練習問題
練習:web コンテナがどのパスをマウントしているか、またポートがどう割り当てられているかを調べてください。
解答
docker inspect -f "{{json .Mounts}}" web
docker inspect -f "{{json .NetworkSettings.Ports}}" web
このページの web にはマウントがなく、-p も指定されていないため、出力はそれぞれ [] と、コンテナ内のポートだけを示す {"80/tcp":null} です。
よくある質問
ネットで見かける {{.NetworkSettings.IPAddress}} がエラーになるのはなぜですか?
Docker 29 ではこのフィールドが提供されなくなり、使うと map has no entry for key "IPAddress" というエラーが表示されます。IP アドレスは各ネットワークから取得してください:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}。
調べられるフィールドを確認するにはどうすればよいですか?
まず -f を付けずに実行すると、出力される JSON の構造がフィールド名になります。たとえば State.Status は {{.State.Status}} と書きます。{{json .Config}} を使って、ある部分をまとめて出力することもできます。
Windows では -f の引用符をどう書きますか?
PowerShell と CMD のどちらでも、テンプレートを二重引用符で囲みます。例:docker inspect -f "{{.State.Status}}" web。テンプレート内では二重引用符を使えないため、必要な場合は単引用符の文字列にしてください。
更新日 2026年10月14日