我知道以前有人问过类似的问题,但我找不到任何能完全满足我需要的问题。我也在 Docker 社区论坛上询问过,但没人能提供帮助。
我无权访问新的 docker image prune
命令,因为我无法从当前版本 1.11.2 升级到最新的 whizzy 1.13,但我需要一个简单的脚本,它可以在 cron 下运行以删除超过 1 个月的所有图像,无论是否悬挂。我不需要担心容器,因为这是来自仅存储图像的存储库。
如果 docker images 将“4 周”报告为“1 个月”,那会很简单,我可以使用类似的东西
docker images | grep " [months]* "
并将输出通过管道传递给 docker rmi
命令。但是,由于它似乎以最多 11 周的“周”为单位进行报告,而一旦图像超过 3 个月或更久,则只能以“月”为单位进行报告,因此我无法执行此操作。
docker images | grep " [months|weeks]* ago" | awk '{print $3,$4,$5}'
会给我这个输出::
6828f152f9cc 2 weeks
52a7412befd3 2 weeks
04c2b29e5e08 2 weeks
cdfb37d22663 2 weeks
ca38a8cabb2b 3 weeks
8b043f2395ba 3 weeks
2aa8b20380a0 3 weeks
1ac7dcf35935 9 weeks
f80873c4845b 9 weeks
d5700d37ee95 9 weeks
594dc21de8de 9 weeks
0c9dacb7fa7c 10 weeks
11f3eec60e17 3 months
b13ebf1a4999 3 months
68b0d6a3be3b 7 months
baadc9c8b0ce 8 months
10eb0d6b2b99 9 months
...但我一直在试图弄清楚如何测试 $4,$5 以仅包含“月”或 >=“4 周”的任何内容,然后可以通过管道将其传递给 docker rmi 。任何人都可以提供一些简单的代码来执行此操作吗?
最佳答案
只是awk
需要:
docker images |awk '$5=="months" || ($4>4 && $5=="weeks") {print $3,$4,$5}'
解释
如果第 5 个字段是“月”或等于“周”并且第 4 个大于 4,则打印所需的列。
关于bash - 需要简单的脚本来删除所有超过 4 周的 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364394/