You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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 "清理完成"

使用方法

  1. 将上述代码保存为文件,例如命名为clean_docker_none.sh
  2. 给脚本添加可执行权限,执行命令:chmod +x clean_docker_none.sh
  3. 直接运行脚本即可完成自动清理:./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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:54:27