# docker的清理方案

# 停止所有容器

docker stop $(docker ps -aq)
1

📊 详细解释

  1. docker ps -aq
  • docker ps:列出容器的基本命令,默认只显示正在运行的容器
  • -a--all:显示所有状态的容器(包括 Exited 已停止的)
  • -q--quiet只显示容器ID,不显示其他信息(如表头、状态、端口等)
  1. $(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

⚠️ 重要提醒

这条命令是强制性的,会停止你所有的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

关键输出:最后一行 Total reclaimed space: X.XXGB 告诉你总共回收了多少磁盘空间

清理内容详解

清理对象 被清理的条件 风险/影响
容器 所有已停止Exited状态)的容器 数据丢失:容器内未持久化的数据会消失
镜像 所有没有被任何容器引用的镜像(包括<none>悬空镜像) 重建耗时:下次运行需要重新拉取镜像
网络 所有没有被任何容器使用的自定义网络 重新创建网络配置
所有没有被任何容器挂载的卷(匿名卷和命名卷) 永久数据丢失:卷内所有数据会被删除

📊 磁盘分析表

占用位置 可能大小 清理方法 风险
/var/lib/docker/ 10-30GB docker system prune -af --volumes 会删除所有停止的容器和未使用的镜像

重要警告与注意事项

这是最彻底的清理命令,会删除以下重要数据:

  1. 所有停止的容器
  2. 所有未使用的镜像
  3. 所有未使用的卷

# 重启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
Last Updated: 12/25/2025, 1:26:33 PM