docker inspect是查看镜像或容器详细元数据最直接的命令,输出json格式,涵盖id、repotags、created、config、rootfs等核心字段,并支持--format和jq精准提取关键信息。

docker inspect 是查看 Docker 镜像或容器详细信息最直接、最权威的命令,它输出的是 JSON 格式结构化数据,涵盖镜像构建信息、环境变量、挂载点、网络配置、存储驱动细节等全部元数据。关键在于如何精准提取所需字段,避免被大量冗余信息干扰。
快速查看镜像基础信息
对镜像名(或 ID)执行 docker inspect 即可获取完整元数据。例如:
docker inspect nginx:alpine
输出包含 Id、RepoTags、Created、Size、Architecture、Os 等核心字段。注意:若镜像未本地存在,命令会报错——需先 docker pull 或确保已构建成功。
用 --format 提取特定字段(推荐)
配合 Go 模板语法 --format(简写为 -f),可直接输出单个值,跳过 JSON 解析。常用示例:
- 查看镜像 ID:
docker inspect -f '{{.Id}}' nginx:alpine - 查看创建时间:
docker inspect -f '{{.Created}}' nginx:alpine - 查看操作系统与架构:
docker inspect -f '{{.Os}}/{{.Architecture}}' nginx:alpine - 查看所有标签(RepoTags):
docker inspect -f '{{range .RepoTags}}{{.}} {{end}}' nginx:alpine - 查看 ENV 变量列表:
docker inspect -f '{{range .Config.Env}}{{.}} {{end}}' nginx:alpine
解析 Config 和 ContainerConfig 字段
镜像元数据中,.Config 是构建时定义的默认配置(如 CMD、ENTRYPOINT、WORKDIR、EXPOSE),而 .ContainerConfig 是历史兼容字段,通常与 .Config 内容一致。重点关注:
-
.Config.Cmd:默认执行命令(可能为 null,表示依赖 ENTRYPOINT) -
.Config.Entrypoint:入口程序,决定容器启动时实际调用的可执行文件 -
.Config.ExposedPorts:声明暴露的端口(仅声明,不自动映射) -
.Config.Volumes:声明的卷挂载点(影响 docker run -v 的默认行为)
例如查 nginx 默认监听端口:docker inspect -f '{{.Config.ExposedPorts}}' nginx:alpine,输出类似 map[80/tcp:{}]。
结合 jq 工具做复杂查询(进阶)
当需要多层嵌套过滤、数组遍历或格式化输出时,jq 更灵活。确保系统已安装 jq:
- 列出所有 ENV 键值对(易读格式):
docker inspect nginx:alpine | jq -r '.[0].Config.Env[]' - 提取所有 EXPOSE 的端口名:
docker inspect nginx:alpine | jq -r '.[0].Config.ExposedPorts | keys[]' - 查看镜像层级(Layers)数量与大小:
docker inspect nginx:alpine | jq -r '.[0].RootFS.Layers | length'
注意:docker inspect 输出是数组(即使只查一个镜像),所以 jq 中常以 .[0] 开头取首项。
掌握 docker inspect 的字段路径和模板语法,就能在 CI/CD 脚本、镜像审计或故障排查中快速定位关键配置。不复杂但容易忽略细节,比如混淆 .Config 和 .ContainerConfig,或误把 ExposedPorts 当作实际映射端口。











