docker inspect --format 使用 go 模板语法精准提取容器元数据,支持点号路径、range 遍历、index 定位、if 条件判断及 json 函数,轻量可靠,适合脚本集成。

用 docker inspect --format 提取容器元数据,核心是用 Go 模板语法定位嵌套字段,跳过冗长 JSON,直接输出需要的值。它不依赖外部工具,轻量、可靠、适合脚本集成。
常用字段提取写法
字段路径按 JSON 层级逐级展开,用点号连接;数组或 map 类型需配合 range 或 index 处理:
- 容器 IP 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx - 镜像名称:
docker inspect -f '{{.Config.Image}}' my-nginx - 启动命令:
docker inspect -f '{{.Config.Cmd}}' my-nginx - 内存限制(字节):
docker inspect -f '{{.HostConfig.Memory}}' my-nginx - 挂载卷详情:
docker inspect -f '{{json .Mounts}}' my-nginx | jq(加jq美化更易读)
处理多网络或多端口映射
容器可能接入多个网络,或暴露多个端口,单一字段不存在时会报错,必须用 range 遍历或 index 定位:
- 遍历所有网络获取网关:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.Gateway}}{{"\n"}}{{end}}' my-nginx - 查特定端口映射(如 8080/tcp 的宿主机端口):
docker inspect -f '{{(index .NetworkSettings.Ports "8080/tcp" 0).HostPort}}' my-nginx - 查所有暴露端口及映射:
docker inspect -f '{{json .NetworkSettings.Ports}}' my-nginx
安全提取与容错写法
字段可能缺失(如未配置健康检查、无挂载卷),硬引用会报错。可用条件判断避免中断:
- 判断健康状态是否存在:
docker inspect -f '{{if .State.Health}}{{.State.Health.Status}}{{else}}n/a{{end}}' my-nginx - 提取安全选项(如 no-new-privileges):
docker inspect -f '{{range .HostConfig.SecurityOpt}}{{if contains . "no-new-privileges"}}{{.}}{{end}}{{end}}' my-nginx - 获取日志路径(存在才输出):
docker inspect -f '{{if .LogPath}}{{.LogPath}}{{else}}not set{{end}}' my-nginx
配合 json 函数结构化输出
对复杂嵌套结构(如 .Mounts、.State.Health.Log),直接用 {{json .Field}} 输出格式化 JSON,再交给 jq 过滤更稳妥:
- 查看健康检查完整日志:
docker inspect -f '{{json .State.Health.Log}}' my-nginx | jq '.[-1]' - 列出所有绑定挂载源路径:
docker inspect -f '{{json .Mounts}}' my-nginx | jq -r 'map(select(.Type=="bind"))[].Source'











