首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker磁盘满了?这样清理高效又安全

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

作者头像
王中阳AI编程
发布2026-03-17 19:33:47
发布2026-03-17 19:33:47
1410
举报
文章被收录于专栏:Go语言学习专栏Go语言学习专栏

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

今天把解决思路整理出来,不仅能帮你快速释放磁盘空间,也想顺便安利下我们的项目课程(https://mp.weixin.qq.com/s/ACzEHtvGh2YsU_4fxo83fQ),里面还包含了更多部署运维的实战技巧哦~

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

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

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

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

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

📌 一、命令简介

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

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

⚠️ 默认不会删除

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

🛠️ 二、基本语法

代码语言:javascript
复制
docker system prune [OPTIONS]

常用选项

选项

说明

-a, --all

同时删除所有未被使用的镜像 (不仅是悬空镜像)

-f, --force

跳过确认提示,直接执行清理(静默模式)

--filter

按条件过滤要删除的资源(如 until=24h)

--volumes

额外删除未使用的本地卷(⚠️ 高危操作!)

🔍 三、详细行为说明

默认行为(不加 -a

执行 docker system prune 会删除:

资源类型

删除条件

容器

状态为 exited、created 等非运行状态

镜像

仅 dangling=true(即 <none>:<none> 且无容器引用)

网络

用户创建的自定义网络,且未被任何容器使用

构建缓存

所有 docker build 产生的中间层缓存

🧪 四、使用示例

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

代码语言:javascript
复制
$ 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:静默清理(推荐使用)

代码语言:javascript
复制
docker system prune -f

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

代码语言:javascript
复制
docker system prune -a -f

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

代码语言:javascript
复制
docker system prune --volumes -f

🔒 五、安全性与风险控制

✅ 安全保障

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

⚠️ 风险提示

操作

风险

prune -a

可能误删后续部署所需的镜像

prune --volumes

永久删除数据库等持久化数据

在生产环境自动执行

可能导致服务恢复困难(缺少镜像)

✅ 安全建议

  1. 先预览再执行:不加 -f 运行,确认删除列表
  2. 生产环境避免-a--volumes
  3. 重要镜像提前备份
代码语言:javascript
复制
docker save myapp:v1 -o myapp_v1.tar
  1. 定期监控磁盘使用
代码语言:javascript
复制
docker system df

📊 六、查看清理效果

清理前后对比磁盘占用:

代码语言:javascript
复制
# 清理前
docker system df

# 执行清理
docker system prune -f

# 清理后
docker system df

输出示例:

代码语言:javascript
复制
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 监控,可让部署更顺畅。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王中阳 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📌 问题根源:Docker 为什么会占满磁盘?
  • 🛠️ 核心解决方案:docker system prune 命令
    • 📌 一、命令简介
    • 🛠️ 二、基本语法
      • 常用选项
    • 🔍 三、详细行为说明
      • 默认行为(不加 -a)
    • 🧪 四、使用示例
      • 示例 1:交互式清理(推荐首次使用)
      • 示例 2:静默清理(推荐使用)
      • 示例 3:彻底清理(包括未使用的有标签镜像)
      • 示例 4:清理 + 删除未使用卷(高危!)
    • 🔒 五、安全性与风险控制
      • ✅ 安全保障
      • ⚠️ 风险提示
      • ✅ 安全建议
    • 📊 六、查看清理效果
    • 📝 总结:让磁盘清理成为习惯
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档