悬空镜像指无标签且未被任何容器引用的中间层镜像,显示为:,占用磁盘空间却无运行价值;宝塔“清理镜像”仅删未引用的带标签镜像,无法清理悬空镜像,需手动执行docker image prune -a -f或docker system prune -a -f。

悬空镜像(dangling images)是什么,为什么必须清理
悬空镜像就是那些没有标签、也没有任何容器在用的中间层镜像,docker images 里显示为 <none>:<none></none></none>。它们是 Docker 构建过程留下的“废料”,不提供运行能力,但会持续占磁盘空间——一个构建失败或频繁重做的项目,几周就能积攒几个 GB。
宝塔面板的“本地镜像”页虽然能点“清理镜像”,但它只删未被引用的**带标签镜像**,对悬空镜像视而不见。所以你点了清理,df -h 看 /var/lib/docker 仍爆满,大概率就是这些 <none></none> 在作祟。
在宝塔界面点“清理镜像”根本不管用,该用什么命令
宝塔 Docker 模块的“清理镜像”按钮本质调用的是 docker image prune,它默认只清理真正的悬空镜像(即 dangling=true),但有些旧版或异常状态下的镜像会被漏掉。更稳妥的做法是手动执行:
-
docker image prune -a -f:强制删除所有未被任何容器引用的镜像(含带标签但无容器用的) -
docker system prune -a -f:一步清空容器、网络、构建缓存、悬空镜像(慎用,会删掉所有已停止容器)
注意:-a 表示“all”,不是默认行为;没加 -a 的 docker image prune 就是宝塔点的那个,基本等于白清。
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
清理后磁盘空间没释放?可能是 volume 或 build cache 没动
Docker 的数据卷(volume)和构建缓存(builder cache)不会随镜像删除自动消失,长期积累同样吃空间。常见现象是:docker system df 显示 BUILD CACHE 占几百 MB,VOLUME SIZE 几个 GB,但镜像列表已经空了。
- 删悬空卷:
docker volume prune -f(只删没被任何容器挂载的卷) - 删构建缓存:
docker builder prune -f(Docker 23.0+ 默认启用 BuildKit,缓存独立管理) - 查大体积卷:
du -sh /var/lib/docker/volumes/* 2>/dev/null | sort -hr | head -10
误删正在运行的镜像或容器怎么办
用 docker image prune -a -f 或 docker system prune -a -f 前,务必先确认当前业务容器状态:
- 查哪些容器在跑:
docker ps - 查哪些镜像正被使用:
docker ps --format "{{.Image}}" | sort -u - 别在生产环境直接跑
docker rmi -f $(docker images -q)—— 这会强行删掉所有镜像,哪怕有容器正基于它运行,下次重启就起不来
真正危险的不是“删多了”,而是删完发现某个关键服务容器启动报错 No such image,又没留备份镜像或 Dockerfile。清理前至少记下 docker ps 输出的镜像名和标签。










