编写Bash脚本删除REPOSITORY/TAG为none的Docker镜像及关联容器
Docker 悬空冗余镜像自动清理Bash脚本
实现逻辑
脚本会自动完成以下操作,无需手动逐个传入镜像ID:
- 筛选所有
REPOSITORY为<none>或TAG为<none>的冗余镜像 - 优先强制删除占用上述镜像的所有容器(包含运行中、已停止的关联容器)
- 批量移除所有匹配的冗余镜像,清理磁盘残留
完整脚本代码
#!/bin/bash # 筛选所有REPOSITORY或TAG为none的镜像ID none_images=$(docker images | grep -E '<none>' | awk '{print $3}' | uniq) if [ -z "$none_images" ]; then echo "未检测到标记为none的冗余镜像,无需清理" exit 0 fi echo "检测到待清理的none镜像ID列表:" echo "$none_images" echo "================================" # 先删除所有关联占用的容器 for image_id in $none_images do # 查找使用该镜像的所有容器ID related_containers=$(docker ps -a --filter "ancestor=$image_id" -q) if [ -n "$related_containers" ]; then echo "正在删除镜像$image_id 关联的容器:$related_containers" docker rm -f $related_containers fi done echo "================================" echo "开始批量删除冗余none镜像" docker rmi $none_images echo "清理完成"
使用方法
- 将上述代码保存为文件,例如命名为
clean_docker_none.sh - 给脚本添加可执行权限,执行命令:
chmod +x clean_docker_none.sh - 直接运行脚本即可完成自动清理:
./clean_docker_none.sh
可选安全校验配置
如果担心误删,可以在执行删除操作前增加人工确认步骤,在脚本docker rmi $none_images行前添加如下代码:
read -p "确认删除上述所有镜像?输入y继续,其他键退出:" confirm if [ "$confirm" != "y" ]; then echo "已取消清理操作" exit 0 fi
内容的提问来源于stack exchange,提问作者Syed Saad Ullah Shah
相关产品推荐
相关产品推荐

