docker images 默认只显示镜像 ID 前 12 位,需加 --no-trunc 才显示完整 64 位 SHA256 哈希;--format 用 Go template 定制输出,须双引号包裹如 "{{.ID}}";-f/--filter 多条件为 AND 关系;默认排序不保证稳定,需显式用 --sort 指定字段及升降序。

docker images 不显示镜像 ID 的完整哈希?
默认 docker images 只显示镜像 ID 的前 12 位,这不是截断——是 Docker 自己做的缩写展示,底层 ID 没丢。想看全量 ID,得用 --no-trunc 参数。
- 不加参数时,
IMAGE ID列显示类似a1b2c3d4e5f6(12 字符) - 加
--no-trunc后,变成完整的 64 位 SHA256 哈希,如sha256:a1b2c3d4e5f6... - 这个参数只影响输出格式,不影响命令执行逻辑或性能
- 注意:它不能和
--format混用,否则报错conflicting options: --format and --no-trunc
用 --format 定制 docker images 输出字段和顺序
--format 是最灵活的定制方式,本质是 Go template 语法,不是简单列名拼接。常见误操作是照抄文档里的 "{{.Repository}}" 却忘了加引号,或者漏掉点号导致空输出。
- 必须用双引号包裹整个模板字符串,例如:
docker images --format "{{.Repository}}\t{{.Tag}}\t{{.ID}}" - 常用字段有:
.Repository、.Tag、.ID、.CreatedSince、.Size,大小写敏感 - 字段值为空时(比如
<none></none>镜像),.Repository和.Tag返回空字符串,不是<none>—— 这点容易在脚本里引发判断错误 - 想输出制表符分隔便于 awk 处理,用
\t;换行用\n,但别滥用,否则破坏单行一条记录的约定
过滤镜像时 -f 和 --filter 的行为差异
-f 和 --filter 完全等价,是同一参数的短/长写法,但过滤逻辑是“AND”而非“OR”,多个 -f 条件必须同时满足。
- 例如:
docker images -f "dangling=true" -f "reference=nginx:*"—— 找既是悬空镜像又名字含 nginx 的,几乎不可能匹配到 - 真正想查 nginx 相关镜像,应该用:
docker images nginx(直接传参)或docker images -f "reference=nginx:*" -
dangling=true只匹配未被任何镜像引用的层(即<none>:<none></none></none>),不是“没 tag”的镜像——这是最大误解点 - 过滤
before或since时,时间值必须是镜像 ID 或镜像名+tag,不能是日期字符串
输出结果排序不稳定?别依赖默认顺序
docker images 默认按仓库名、tag、创建时间倒序排,但这个顺序没文档保证,不同 Docker 版本可能微调。脚本中若依赖顺序(比如取第一行当最新镜像),大概率翻车。
- 需要确定顺序时,必须显式加
--sort,可选字段:repository、tag、id、created、size -
--sort created是升序(最早创建在前),--sort -created才是降序(最新在前)——负号不能省 - 组合排序不支持,比如不能 “先按 repository 升序,再按 created 降序”
- 如果要按镜像大小从大到小排:
docker images --sort -size
真正麻烦的是混合使用 --format、--filter 和 --sort 时,参数顺序无关,但字段名大小写、模板引号、负号位置这些细节一错就静默失败或输出空——建议先用默认输出确认数据存在,再逐步加定制。










