帮我写一个shell脚本,当镜像名一样的进行判断,如果大于3个,就把旧的镜像删除,只保留两个最近的镜像
时间: 2024-04-15 13:29:54 浏览: 132
当镜像名一样时,你希望删除旧的镜像并保留两个最近的镜像。你可以尝试以下的Shell脚本:
```bash
#!/bin/bash
image_name="your_image_name"
# 获取所有与指定镜像名相同的镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | grep "$image_name" | sort -t "|" -k2,2)
# 获取镜像数量
image_count=$(echo "$image_list" | wc -l)
# 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
if [ $image_count -gt 3 ]; then
images_to_delete=$((image_count - 2))
images_to_delete_list=$(echo "$image_list" | head -n $images_to_delete | cut -d "|" -f 1)
for image in $images_to_delete_list; do
docker image rm $image
done
echo "旧的镜像已删除,只保留最近的两个镜像。"
else
echo "无需删除镜像,数量未超过3个。"
fi
```
请将 `your_image_name` 替换为你需要操作的镜像名。这个脚本会使用 `docker image ls` 命令获取镜像列表,并按照创建时间排序。然后,根据镜像数量判断是否需要删除旧的镜像,并使用 `docker image rm` 命令删除旧的镜像,保留最近的两个镜像。最后,会输出相应的操作结果。
请确保在执行脚本之前已经安装了 Docker,并且具有执行脚本的权限。
阅读全文