# docker的清理方案
# 停止所有容器
docker stop $(docker ps -aq)
1
📊 详细解释
docker ps -aq
docker ps:列出容器的基本命令,默认只显示正在运行的容器-a或--all:显示所有状态的容器(包括Exited已停止的)-q或--quiet:只显示容器ID,不显示其他信息(如表头、状态、端口等)
$(docker ps -aq)
$()是命令替换语法:先执行括号内的命令,然后用该命令的输出结果替换整个$()表达式- 如果没有
$(),你需要手动输入所有容器ID;有了它,就可以动态获取当前所有容器ID并批量操作
🎯 实际执行流程
假设你的系统中有3个容器,执行过程是这样的:
# 第一步:先执行 $(...) 里的命令
docker ps -aq
# 输出三个容器ID:
# 7a8b9c0d1e2f
# 3f4e5d6c7b8a
# 1a2b3c4d5e6f
# 第二步:用上面的输出替换 $()
# 命令变成了:
docker stop 7a8b9c0d1e2f 3f4e5d6c7b8a 1a2b3c4d5e6f
# 第三步:执行最终命令,依次停止这三个容器# 第一步:先执行 $(...) 里的命令
docker ps -aq
# 输出三个容器ID:
# 7a8b9c0d1e2f
# 3f4e5d6c7b8a
# 1a2b3c4d5e6f
# 第二步:用上面的输出替换 $()
# 命令变成了:
docker stop 7a8b9c0d1e2f 3f4e5d6c7b8a 1a2b3c4d5e6f
# 第三步:执行最终命令,依次停止这三个容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
⚠️ 重要提醒
这条命令是强制性的,会停止你所有的Docker容器,包括你可能不想停止的重要服务。使用时需要注意:
| 场景 | 建议 |
|---|---|
| 清理所有容器 | ✅ 适用 |
| 只停止部分容器 | ❌ 不适用,应指定具体容器名/ID |
| 生产环境或有状态服务 | ⚠️ 谨慎使用,可能造成服务中断 |
# 强制清理所有Docker未使用的资源
强制清理所有Docker未使用的资源:镜像、容器、卷、网络
docker system prune -af --volumes
1
🔍 命令拆解与含义
| 命令部分 | 含义 | 作用 |
|---|---|---|
docker system prune | Docker系统清理命令 | 清理未使用的Docker对象 |
-a 或 --all | 全部 | 不仅清理未使用的对象,还清理未被任何容器引用的镜像 |
-f 或 --force | 强制 | 跳过确认提示,直接执行 |
--volumes | 卷 | 同时清理未被任何容器使用的匿名和命名卷 |
组合起来的意思:强制、无确认地清理所有未使用的Docker资源,包括镜像、容器、网络和卷。
📊 实际执行流程与输入输出
命令执行后,会显示类似以下的清理报告:
Deleted Containers:
5d1e3f8a7b2c
a9b8c7d6e5f4
... (列出所有被删除的停止状态容器ID)
Deleted Images:
untagged: redis:latest
untagged: nginx:alpine
deleted: sha256:abc123...
... (列出所有被删除的镜像层)
Deleted Networks:
my_custom_network
... (列出被删除的未使用网络)
Deleted Volumes:
anonymous_volume_abc123
my_named_volume
... (列出被删除的未使用卷)
Total reclaimed space: 2.5GB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
关键输出:最后一行 Total reclaimed space: X.XXGB 告诉你总共回收了多少磁盘空间。
清理内容详解
| 清理对象 | 被清理的条件 | 风险/影响 |
|---|---|---|
| 容器 | 所有已停止(Exited状态)的容器 | 数据丢失:容器内未持久化的数据会消失 |
| 镜像 | 所有没有被任何容器引用的镜像(包括<none>悬空镜像) | 重建耗时:下次运行需要重新拉取镜像 |
| 网络 | 所有没有被任何容器使用的自定义网络 | 重新创建网络配置 |
| 卷 | 所有没有被任何容器挂载的卷(匿名卷和命名卷) | 永久数据丢失:卷内所有数据会被删除 |
📊 磁盘分析表
| 占用位置 | 可能大小 | 清理方法 | 风险 |
|---|---|---|---|
| /var/lib/docker/ | 10-30GB | docker system prune -af --volumes | 会删除所有停止的容器和未使用的镜像 |
重要警告与注意事项
这是最彻底的清理命令,会删除以下重要数据:
- 所有停止的容器
- 所有未使用的镜像
- 所有未使用的卷
# 重启Docker服务
systemctl restart docker
1
# 替代方案(更安全)
如果不想清理得这么彻底,可以使用这些更精确的命令:
# 1. 安全清理(交互式确认,不包括卷)
docker system prune
# 2. 仅清理悬空镜像(最安全)
docker image prune
# 3. 清理指定时间前的容器
docker container prune --filter "until=24h"
# 4. 仅清理未使用的卷(谨慎!)
docker volume prune
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
← 论docker网桥模式 yum源修改 →