~$ docker images --filter=reference="*test-*" --format 'table {{.Repository}}\t{{.CreatedAt}}\t{{.ID}}'
REPOSITORY CREATED AT IMAGE ID
mop-test-image 2019-08-19 09:18:09 +0000 UTC a16fc65f4d19
mop-test-image 2019-08-19 09:14:11 +0000 UTC d6a3377f609a
mop-test-image 2019-08-19 09:09:02 +0000 UTC 992aef1d798f
mop-test-image 2019-08-19 09:01:43 +0000 UTC 132bc17ea5cb
mop-test-image 2019-08-19 08:55:59 +0000 UTC 9dfa73010b19
一个人如何获得除上一个(最近创建的一个)以外的所有图像ID。换句话说,此列表:
d6a3377f609a
992aef1d798f
132bc17ea5cb
9dfa73010b19
ID号将随时间变化。因此,将它们包含在答案中是行不通的。它必须依靠CREATED AT,它也会随着时间而变化。
答案 0 :(得分:1)
使用before
过滤器
docker rmi -f $(docker images --filter=reference="*test-*" --filter before=a16fc65f4d19 -q)
或用于自动查找并删除它们:
docker rmi -f $(docker images --filter=reference="*test-*" --filter before=`docker images --filter=reference="*test-*" --format '{{.ID}}' | head -1` -q)
如果第二张命令中的最新图像未包含在参考“其他图像”中,则您需要在第二个命令中包含两次--filter=reference="*test-*"
答案 1 :(得分:1)
要仅获取docker映像ID
,请使用:
docker images --format '{{.ID}}'
并获取除前一个用途外的所有值:
docker images --format '{{.ID}}' | sed '1d'
答案 2 :(得分:0)
通过docker images
命令将awk
的输出插入类似这样的内容吗?
awk 'NR > 2 { print $6 }'
所以
docker images --filter=reference="*test-*" --format 'table {{.Repository}}\t{{.CreatedAt}}\t{{.ID}}' | awk 'NR > 2 { print $6 }'
答案 3 :(得分:0)
docker images --format '{{.CreatedAt}}\t{{.ID}}' | sort | cut -f2
这里的sort
很棘手。因为恰好假设每个日期都在相同的时区中,所以我们可以按字典顺序对列表进行排序并获得正确的日期顺序。然后,我删除日期并仅打印ID。
现在“除了最上面的部分”部分,只需将其通过管道传输到tail -n+2
。
如果没有它,我将把日期转换为Unix纪元日期,对其进行排序,然后进行cut
:
docker images --format '{{.CreatedAt}}\n{{.ID}}' |
xargs -d$'\n' -n2 bash -c 'printf "%s\t%s\n" "$(date -d "${1//UTC}" +%s)" "$2"' -- | sort -n | cut -f2
要使Docker的日期分别为date
,我只删除了UTC
后缀,它就起作用了。