最近我们发现我们的 Kubenetes 节点正在使用高磁盘空间,检查节点后我们发现高磁盘空间是由于 docker 镜像造成的。
我们知道,如果我们运行docker image prune -a
命令,它将删除所有未使用的图像,但它也会删除我们需要的一些未使用的图像。
我们检查了图像修剪命令是否支持仅删除特定图像及其标签(webapp:1、webapp:2 等),结果不支持。尽管docker image ls
命令具有此功能(docker image ls --filter reference=<image name>
)
有没有办法只修剪特定的图像及其标签?
答案1
实际上,您可以使用 for 循环来执行此操作。除非有人告诉您如何使用 Docker 执行此操作,否则您可以使用此方法;
for image in $(docker image ls --filter reference=<image_name> | awk '{if (NR>1) {print $3}}'); do docker image rm $image; done
此命令仅列出相关容器并将其镜像 ID 发送给删除命令。要测试它,您可以像这样更改最后一部分;
for image in $(docker image ls --filter reference=<image_name> | awk '{if (NR>1) {print $3}}'); do echo $image; done