--format 的作用
docker ps 默认输出列宽固定、信息挤在一起,--format 用 Go 模板挑列:既能精简成人眼友好的表格,也能直接产出 JSON 交给 jq 做过滤。同一套模板也能用在 docker ps -a 与 docker images 上。
基本信息
| 用途 | 自定义 ps / image 列表的输出列 |
|---|---|
| 语法 | --format 'table {{.Names}}\t{{.Status}}' |
| JSON 输出 | --format '{{json .}}' 后接 jq |
| 常用字段 | .ID .Names .Image .State .Status .Ports .RunningFor .Labels .Mounts .Networks |
| 固化配置 | ~/.docker/config.json 里的 psFormat、imagesFormat |
典型使用场景
- 巡检脚本只取容器名与状态,输出稳定便于 diff 与存档
- 生成报表:拼成 TSV/CSV 交给表格工具或告警系统
- 结合 jq 过滤出所有非 running 或不健康的容器
- 一屏看全端口映射与挂载来源,省去翻 docker inspect 的 JSON
- CI 里断言目标服务的容器确实处于 running 状态
- 把模板写进 ~/.docker/config.json 的 psFormat,日常 docker ps 直接就是自己习惯的列
示例
示例
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' # table 前缀才带表头
docker ps --format '{{.Names}}' | sort # 只要名字好比对
docker ps --format '{{json .}}' | jq -r 'select(.State!="running") | .Names'
docker ps -a --format '{{.Names}}\t{{.RunningFor}}\t{{.Status}}' # 含已停止容器常用模板字段
| 字段 | 内容 | 使用注意 |
|---|---|---|
| {{.Names}} | 容器名 | 列表默认按名称排序 |
| {{.Image}} | 镜像名与标签 | 确认跑的是不是刚发布的版本 |
| {{.State}} | running / exited 等固定值 | 脚本判断用这一列 |
| {{.Status}} | 运行时长与健康标记 | 人看的文本,会随运行时间变化 |
| {{.Ports}} | 端口映射串 | 核对宿主端口是否按预期发布 |
| {{.Labels}} | 逗号分隔的标签 | 配合 label 过滤做分组 |
表头只在加 table 前缀时打印;模板里的 \t 是制表转义,写成字面的 tab 字符或 shell 转义反而会输出错位。
字段名大小写敏感,写成 {{.name}} 会报 can't evaluate field name;不确定有哪些字段时先跑 --format '{{json .}}' 看完整键名。
docker images --format 与 docker ps 同源,只是字段集合不同(.Repository .Tag .Size .CreatedSince .Digest),同一套写模板的思路可以直接搬过去。