如何用Docker --format筛选repo1镜像并输出JSON及兼容性咨询
解决Docker --format过滤并输出全量JSON的问题
我来帮你搞定这个Docker格式输出的问题,刚好之前在旧版本Docker环境里折腾过类似需求,踩过一些坑😉
一、获取repo1镜像的全列JSON输出
首先,你需要结合--filter和--format两个选项来实现:
直接用这条命令就能得到你要的结果:
docker images --filter "reference=repo1*" --format '{{json .}}'
拆解下细节:
- 过滤repo1镜像:
--filter "reference=repo1*"用来精准匹配仓库名为repo1开头的镜像(包括repo1本身和repo1:tag这类带标签的镜像),比用grep过滤文本更可靠,不会误匹配其他字段里包含repo1的内容。 - 输出全量JSON:
--format '{{json .}}'是关键!官方文档大多只给单列示例(比如{{.Repository}}),但其实用{{json .}}可以直接把整个镜像对象的所有字段转成JSON格式,不用手动一个个列字段,完美满足你要全列信息的需求。
执行后你会得到每行一个JSON对象,每个对象包含Repository、Tag、ID、CreatedAt、Size等所有默认docker images显示的字段,甚至还有一些额外元数据。
二、向后兼容性说明
这个特性的兼容性主要看你的Docker版本:
- Docker 1.13及以上:
--format选项是在1.13版本正式引入的,同时reference过滤器在更早的1.10版本就已经支持了,所以只要你的环境是1.13+,上面的命令完全可以正常运行,没有兼容性问题。 - Docker 1.12及以下:这个版本没有
--format特性,你就只能退而求其次,自己解析docker images的默认表格输出。比如用grep过滤repo1的行,再用awk提取字段转成JSON:
注意这里docker images | grep "^repo1" | awk '{ printf "{\"Repository\":\"%s\",\"Tag\":\"%s\",\"ImageID\":\"%s\",\"Created\":\"%s %s\",\"Size\":\"%s\"}\n", $1, $2, $3, $4, $5, $6 }'Created字段是由默认输出的第4和第5列组成的(比如2 weeks ago),所以要把这两部分拼接起来。如果你的默认输出列顺序有变化,可能需要调整awk的列索引。
如果你的旧环境版本低于1.13,又不能调用Docker API,那这种文本解析的方式就是最直接的替代方案了。
内容的提问来源于stack exchange,提问作者ffConundrums
相关产品推荐
相关产品推荐

