模板取值是什么
容器元数据的完整输出很长,用模板可以只取关心的字段:状态、退出码、是否被内存超限杀死、挂载列表、网络地址等。它让判断变成一行命令,也让脚本取值不再依赖表格对齐,是排障与自动化里最常用的技巧之一。
基本信息
| 书写方式 | 在格式化参数后写模板表达式 |
|---|---|
| 常用字段 | 状态、退出码、是否被超限杀死、重启次数、挂载、网络、启动时间 |
| 整段输出 | 可用内置函数把某个子树原样输出为 JSON |
| 循环写法 | 对数组字段用遍历语法逐项渲染 |
| 大小写 | 字段名大小写敏感,写错会直接报无法求值 |
典型使用场景
- 判断退出原因:一眼看退出码与被超限杀死的标记,确定是程序问题还是资源问题
- 检查重启情况:查看重启次数与策略,判断服务是否处在崩溃循环
- 核对挂载:列出宿主路径到容器路径的映射,确认数据目录真的挂出来了
- 读网络地址:在脚本里取出容器地址,做健康检查或配置上游
- 批量巡检:对一批容器循环执行模板,输出成表格或写入监控
常用示例
常用示例
docker inspect -f '{{.State.Status}} 退出码={{.State.ExitCode}}' web
docker inspect -f '{{.State.OOMKilled}} 重启策略={{.HostConfig.RestartPolicy.Name}}' web
docker inspect -f '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}' web
docker inspect -f '{{json .Config.Env}}' web # 整段环境变量
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web排查必背字段
| 字段 | 含义 | 怎么用 |
|---|---|---|
| State.Status | 当前状态 | 区分运行中、已停止、已创建 |
| State.ExitCode | 退出码 | 非零即异常退出,按应用语义判断 |
| State.OOMKilled | 是否被内存超限杀死 | 为真时先调内存限制再谈优化 |
| RestartCount | 自动重启次数 | 持续增长说明存在崩溃循环 |
| Mounts | 已生效的挂载 | 确认数据目录落在卷还是宿主目录 |
| NetworkSettings.Networks | 网络与地址 | 判断容器间能否互访 |
| State.StartedAt 与 FinishedAt | 启动与结束时间 | 与日志、监控时间线对齐 |
写模板的经验
- 先不带模板输出一次完整内容,看清结构再写表达式
- 一次写多个表达式,减少反复调用命令的次数
- 需要换行或制表符时用字符串拼进去,避免输出挤成一团
- 把常用模板存成脚本或别名,团队里统一口径
- 升级引擎后回归验证一次,字段位置可能变化
字段名写错会直接报无法求值,不会静默返回空值,这一点比表格解析友好。用它做脚本取值,出错时能第一时间暴露。
环境变量与网络字段里可能含内部地址与凭据,把命令输出贴到外部前先过滤一遍,避免信息泄露。