目录
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日