元数据
| id | docker-prune-scope | 收录 | 2026-08-31 |
|---|---|---|---|
| 问题域 | 编码代理与终端 | 主题分组 | 容器与 WSL |
| 适用工具 | docker · 外部工具 | ||
症状
```
# 清理后空间没回来(卷没删)
$ docker volume prune -f
Total reclaimed space: 0B # named 卷默认不删,这就是原因
# 清理教程翻车:正在用的镜像被删
$ docker system prune -a -f # 未用带 tag 镜像全没了 → 下次启动要重新拉
```
特征:prune 后空间没变化(卷/带 tag 镜像没被默认覆盖);或反噬(无过滤 `-a` 删了共享镜像)。
原因
prune 家族各命令默认范围不同:`system prune` 默认含停止容器与 dangling 镜像但不含卷;`volume prune` 默认只删未用匿名卷;带 tag 的未用镜像需 `-a`。共享环境跑无过滤 `-a`/`--volumes` 会误删。
解法
1. `docker system df` 先看四类占比;
2. 按目标选命令:容器=`container prune`、dangling 镜像=`image prune`、卷=`volume prune -a`(确认后)、缓存=`builder prune`;
3. 共享环境所有产物打 `--label`,清理用 `--filter label=` 圈定;
4. 删完用 `docker ps -a` / `docker images` / `docker volume ls` 复核。
验证证据
- 本机实测复现(2026-08-31,WSL 定制预构建版,docker 29.1.3;全部演示产物带 `label=prune-demo=true`,用 `--filter label=` 隔离,未运行无过滤 system prune):
- 构造:两次 build 制造 dangling 镜像 + 2 个停止容器(1 个带匿名卷)+ named 卷 + 网络;
- `system prune -f --filter label=prune-demo=true`:删 2 容器 + 1 网络 + 1 dangling 镜像(untagged: e71931f35c62),tagged `prune-demo-img:latest` 与 `prune-demo-named` 卷保留;
- `volume prune -f`:只删匿名卷(25b060c64c02…),named 卷保留;
- `volume prune -a -f --filter label=prune-demo=true`:删 named 卷;
- `volume prune --help` 原文 `-a, --all Remove all unused volumes, not just anonymous ones`;
- `builder prune -f`:本机 build cache 为空,0B(语义验证)。
- 实测复现日志(2026-08-31)
来源与证据
素材来源:本机实测复现(2026-08-31,Docker 域缺口 #19)
验证证据:Evidence details kept locally (2026-08-31)