目录

Docker inspect 命令教程:查看容器和镜像详细信息(-f 格式示例)

docker inspect 以 JSON 格式显示 Docker 对象的完整配置和状态,对象可以是容器、镜像、Volume、网络。

语法

docker inspect [options] 名称或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 模板:常用查询

以下查询一个名为 web 的 nginx 容器(启动时设置了 -e APP_MODE=demo):

$ 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}}

模板语法:

  • {{.字段.子字段}}:提取一个值。
  • {{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 是子网配置。

相关章节

动手练习

练习:查出 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日