Problem entry · machine-readable · 编码代理与终端

docker system prune 到底删什么?容器/镜像/卷/缓存清理边界速查

本页嵌入 #trove-entity JSON(本条目全量结构化数据);全库数据见 /agent/trove.json。

元数据

iddocker-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)