Docker 通过 --format 参数配合 Go 模板语法实现输出定制:table 模式生成对齐表格,省略 table 则为纯文本流便于管道处理;支持字段提取、拼接、嵌套访问、条件判断、遍历及内置函数(如 lower、json、join)增强表达力。

Docker 命令通过 --format(或简写 -f)参数配合 Go 模板语法,实现灵活、精准的输出定制。核心不是改命令本身,而是控制“怎么展示数据”——跳过默认冗长格式,只留你需要的字段和样式。
用 table 模式快速生成对齐表格
加 table 前缀可自动渲染表头与边框,适合终端直读:
-
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"→ 显示容器名、状态、端口映射,用制表符\t分隔保证列对齐 -
docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}"→ 合并镜像仓库与标签为一列,再加大小,更贴近实际使用习惯 - 省略
table就是纯文本流,适合后续管道处理,比如docker stats --no-stream --format "{{.Name}} {{.CPUPerc}}" | sort -k2 -nr
提取单个字段或拼接自定义文本
不依赖表格,直接输出结构化字符串,便于脚本解析或日志记录:
-
docker ps -q --format "{{.ID}}"→ 只输出容器 ID 列表,常用于批量操作前获取目标 -
docker inspect -f 'IP: {{.NetworkSettings.IPAddress}}' my-nginx→ 输出带前缀的 IP 地址,避免裸值歧义 -
docker ps --format "运行中: {{.Names}} ({{.RunningFor}})"→ 把动态字段嵌入固定文案,提升可读性
处理嵌套结构和条件逻辑
面对复杂对象(如 inspect 输出),模板支持点号链式访问和基础判断:
-
docker inspect -f '{{.State.Status}}:{{.State.ExitCode}}' my-db→ 直接取状态和退出码,不用解析整段 JSON -
docker ps --format '{{if eq .Status "running"}}✅ {{.Names}}{{else}}❌ {{.Names}}{{end}}'→ 根据状态显示不同图标,视觉区分明显 -
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' my-app→ 遍历多个网络,输出所有分配的 IP
配合内置函数增强表达力
Docker 扩展了部分 Go 模板函数,让格式化更实用:
-
docker ps --format '{{.Names}} ({{lower .Status}})'→ 强制小写状态,统一风格 -
docker inspect -f '{{json .Config.Labels}}' my-app→ 输出 JSON 字符串,方便 jq 进一步处理 -
docker ps --format '{{.Names}} → {{join .Ports ", "}}'→ 将端口数组转为逗号分隔的字符串,解决多端口显示混乱问题


















