Docker磁盘满了?这样清理高效又安全

大家好,我是地鼠哥,最近在带着大家做项目的时候碰到了一个印象很深的问题,和大家总结分享一下:明明代码逻辑没问题,部署时却频频报错,排查半天发现是服务器磁盘被占满了

今天把解决思路整理出来,不仅能帮你快速释放磁盘空间,也想顺便安利下我们的项目课程(mp.weixin.qq.com/s/ACzEHtvGh...~

📌 问题根源:Docker 为什么会占满磁盘?

Docker 运行时会产生大量"临时资源",比如:

  • 测试后停止运行的容器
  • 构建失败或过时的镜像
  • 未被使用的自定义网络
  • 构建镜像时产生的缓存文件

这些资源默认不会自动删除,积累久了就会导致磁盘告警。好在 Docker 提供了专门的清理命令,一招就能解决大部分问题。

🛠️ 核心解决方案:docker system prune 命令

📌 一、命令简介

docker system prune 是 Docker 提供的系统级资源清理命令 ,用于自动删除以下未被使用的资源

  • 已停止的容器(Stopped containers)
  • 悬空镜像(Dangling images)
  • 未被任何容器使用的自定义网络(Unused networks)
  • 构建缓存(Build cache)

⚠️ 默认不会删除

  • 正在运行的容器
  • 有标签且未被引用的镜像(如 nginx:latest
  • 数据卷(Volumes)
  • 默认网络(bridgehostnone

🛠️ 二、基本语法

Bash 复制代码
docker system prune [OPTIONS]

常用选项

选项 说明
-a, --all 同时删除所有未被使用的镜像 (不仅是悬空镜像)
-f, --force 跳过确认提示,直接执行清理(静默模式)
--filter 按条件过滤要删除的资源(如 until=24h
--volumes 额外删除未使用的本地卷(⚠️ 高危操作!)

🔍 三、详细行为说明

默认行为(不加 -a

执行 docker system prune 会删除:

资源类型 删除条件
容器 状态为 exitedcreated 等非运行状态
镜像 dangling=true(即 <none>:<none> 且无容器引用)
网络 用户创建的自定义网络,且未被任何容器使用
构建缓存 所有 docker build 产生的中间层缓存

🧪 四、使用示例

示例 1:交互式清理(推荐首次使用)

Bash 复制代码
$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all build cache
Are you sure you want to continue? [y/N] y

示例 2:静默清理(推荐使用)

Bash 复制代码
docker system prune -f

示例 3:彻底清理(包括未使用的有标签镜像)

Bash 复制代码
docker system prune -a -f

示例 4:清理 + 删除未使用卷(高危!)

Bash 复制代码
docker system prune --volumes -f

🔒 五、安全性与风险控制

✅ 安全保障

  • 不影响正在运行的容器和服务
  • 不删除默认网络和关键系统资源
  • 卷(Volumes)默认保留,防止数据丢失

⚠️ 风险提示

操作 风险
prune -a 可能误删后续部署所需的镜像
prune --volumes 永久删除数据库等持久化数据
在生产环境自动执行 可能导致服务恢复困难(缺少镜像)

✅ 安全建议

  1. 先预览再执行 :不加 -f 运行,确认删除列表

  2. 生产环境避免 -a--volumes

  3. 重要镜像提前备份

Bash 复制代码
docker save myapp:v1 -o myapp_v1.tar
  1. 定期监控磁盘使用
Bash 复制代码
docker system df

📊 六、查看清理效果

清理前后对比磁盘占用:

Bash 复制代码
# 清理前
docker system df

# 执行清理
docker system prune -f

# 清理后
docker system df

输出示例:

Plain 复制代码
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        3         2.1GB     1.4GB (66%)
Containers      5         3         120MB     80MB (66%)
Local Volumes   4         2         500MB     300MB (60%)
Build Cache     -         -         800MB     800MB

📝 总结:让磁盘清理成为习惯

磁盘管理是运维的基础工作。定期执行 docker system prune -f 能有效避免磁盘满的问题,配合 docker system df 监控,可让部署更顺畅。

如果你在项目开发中还遇到过其他部署难题,欢迎关注并私信我交流问题,另外我们的微服务电商项目课程(mp.weixin.qq.com/s/ACzEHtvGh... 不仅包含完整的项目架构设计,还有更多像这样的实战运维技巧,帮你少踩坑、高效开发!

相关推荐
是你就无限6156 小时前
Docker 核心技术与实战
docker
苏渡苇6 小时前
Seata 番外篇:使用 docker-compose 部署 Seata Server(TC)及 K8S 部署 Seata 高可用
spring boot·docker·微服务·容器·kubernetes·seata·springcloud
日月云棠6 小时前
12 Enum —— 枚举类型的底层实现
java·后端
工位植物人6 小时前
深入理解Java中的类、抽象类、接口与枚举类
后端
用户2181697049306 小时前
Gin (二) 参数 路由分组
后端
用户925807911486 小时前
nacos服务注册源码浅析
后端
JP-Destiny6 小时前
docker报错-无法解析 registry-1.docker.io
运维·docker·容器
SimonKing6 小时前
Java程序员接入AI的另一种姿势:LangChain4j
java·后端·程序员
右耳朵猫AI7 小时前
Rust技术周刊 2026年第20周
开发语言·后端·rust
苏三说技术7 小时前
别再用MySQL了,AI时代这个数据库更香!
后端