如何清理 Docker 占用的巨大磁盘空间

        我相信很多人在使用 Docker 一段时间后,都会遇到一个常见问题:磁盘空间被迅速吃光,尤其是在进行频繁的镜像构建、测试和运行容器时。以我自己为例,在 Ubuntu 24.04设备上,docker system df -v 一看,Docker 已经占用了 700G+,如下图。其中光是 build cache 就达到了 552G。这种情况并不少见。本文会介绍 Docker 为什么会占用这么多空间,以及如何一步步地清理。

docker占用空间超过700G
docker占用空间达到763G


一、为什么 Docker 会占用这么多空间

Docker 的设计原理决定了它会不断产生缓存和中间数据。主要来源有以下几类:

  1. 镜像层
    每次 docker build 都会把 Dockerfile 的指令拆分成一层一层的镜像。如果你频繁修改 Dockerfile 或者构建不同版本的镜像,就会产生很多旧层。

  2. 构建缓存(Build Cache)
    Docker 默认会缓存中间步骤,以加快下一次构建。例如第一次 apt-get update 的结果会被缓存,第二次构建就直接复用。但随着时间推移,这些缓存越来越多,磁盘就被“吃掉”。

  3. 容器
    容器删除不及时会保留磁盘空间,尤其是已停止的容器。

  4. 卷(Volumes)
    数据卷用于持久化数据库、日志等内容。如果你经常测试数据库镜像(比如 MySQL、Postgres),卷很容易膨胀到几十个 G。

  5. 网络
    Docker 会为容器分配网络,虽然占用空间不大,但如果创建过多也会留下无用配置。


二、先看看空间到底去哪了

第一步是确认哪些部分占用最大。

docker system df -v

它的结构是这样的:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          120       5         80.5GB    70GB (87%)
Containers      15        2         5.3GB     4GB (75%)
Local Volumes   30        10        62GB      40GB (64%)
Build Cache     300                 552.7GB   552.7GB

但实际上我们每个项可能都非常多,比如我的光Image这项就一页看不到头。

可以看到项目非常多,我们大致往下划一下,看到,build cache 是最大的“罪魁祸首”。

当然每个人情况可能不一样,但是cache通常都是罪魁祸首,找打了原因,如何清理呢?


三、如何清理

1. 清理构建缓存

构建缓存往往占用空间最多。

# 删除未使用的构建缓存
docker builder prune# 更彻底,删除所有缓存,包括可能还会用到的
docker builder prune --all

举个例子:如果你构建了 100 个不同版本的镜像,每次 Dockerfile 都有 apt-get update,这些中间结果会一直留在缓存里。执行 docker builder prune --all 后,这些缓存会被清理掉,立刻释放出上百 G。缺点是下次构建会变慢,因为缓存没了。


2. 清理没用的容器

已停止的容器(状态 Exited)通常没有意义,可以直接删掉。

docker container prune

如果你想更谨慎,可以先查看:

docker ps -a

例如:

CONTAINER ID   IMAGE        STATUS
abcd1234       ubuntu       Exited (0) 2 weeks ago
efgh5678       nginx        Exited (137) 3 days ago

这些容器通常就是“残骸”。


3. 清理悬空镜像

所谓悬空镜像,是指 tag 为 <none> 的镜像,它们是被新镜像替换后的旧版本。
查看:

docker images -f dangling=true

清理:

docker image prune

例如你频繁用 docker build .,每次都会产生一个新镜像,旧的就变成 <none>


4. 清理没用的卷

卷是最容易“暗中膨胀”的地方,特别是数据库。
查看:

docker volume ls -f dangling=true

清理:

docker volume prune

比如你测试过几次 MySQL,每次都挂载了一个 volume,哪怕容器删了,数据卷也可能还在,几十 G 的数据就这么堆积下来。


5. 清理没用的网络

查看:

docker network ls

清理:

docker network prune

虽然网络占用空间不大,但保持干净是好习惯。


四、一键清理

如果你只是做实验,对数据不敏感,可以直接:

docker system prune -a --volumes

这会删除所有:

  • 已停止的容器

  • 没有 tag 的镜像

  • 没用的卷

  • 没用的网络

  • 构建缓存

空间释放得最快,但要注意数据卷和缓存一旦清理,就无法恢复。


五、更深入的检查

有时候你清理完,空间还是很大,可以直接查看 /var/lib/docker 下哪些目录占用:

sudo du -h --max-depth=1 /var/lib/docker | sort -h

常见大户:

  • overlay2/:镜像和容器的文件系统

  • volumes/:卷的数据

  • buildkit/:构建缓存

如果 buildkit 特别大,就说明问题出在构建缓存。


六、后续优化建议

  1. 定期清理
    可以加一个定时任务,每个月执行一次 docker builder prune --alldocker volume prune

  2. 精简 Dockerfile
    减少无意义的构建层,比如把多个 RUN 合并,减少缓存堆积。

  3. 单独挂载 /var/lib/docker
    如果 Docker 用得多,可以把 /var/lib/docker 放到一个大磁盘分区,避免根分区被塞满。


七、总结

Docker 占用空间大的原因,往往是 build cache、卷和镜像残留。清理的核心命令就是:

  • docker builder prune --all 清理构建缓存

  • docker container prune 清理没用的容器

  • docker image prune 清理悬空镜像

  • docker volume prune 清理没用的卷

  • docker network prune 清理没用的网络

  • docker system prune -a --volumes 一键清理

清理完成之后,占用空间明显减少:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96345.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CMake】缓存变量

目录 一. 缓存变量 二.创建缓存变量 2.1.使用set()来创建缓存变量 2.2.使用FORCE参数来覆盖缓存变量 2.2.1.示例1——不带force的set是不能覆盖已经存在的缓存变量的 2.2.2.示例2——带force的set才能覆盖已经存在的缓存变量 2.2.3.对比示例 2.3.命令行 -D 创建/覆盖缓…

vue2使用若依框架动态新增tab页并存储之前的tab页的操作

1. 应用场景&#xff1a;点击历史记录&#xff0c;要比较两个tab页的内容时&#xff0c;需要做到切换tab页来回看左右对数据对比。2.开发难点若依项目正常是把路由配置到菜单管理里&#xff0c;都是设定好的。不过它也给我们写好了动态新增tab页的方&#xff0c;需要我们自己来…

论文阅读-SelectiveStereo

文章目录1 概述2 模块2.1 SelectiveIGEV和IGEV的差异2.2 上下文空间注意力2.2.1 通道注意力2.2.2 空间注意力2.3 SRU3 效果参考资料1 概述 本文主要结合代码对Selective的创新点进行针对性讲解&#xff0c;相关的背景知识可以参考我写的另两篇文章论文阅读-RaftStereo和论文阅…

深入分析神马 M56S+ 202T 矿机参数与性能特点

引言在比特币&#xff08;BTC&#xff09;和比特币现金&#xff08;BCH&#xff09;等主流加密货币的挖掘过程中&#xff0c;矿机的选择直接关系到挖矿的效率与收益。神马 M56S 202T矿机是SHA-256算法的矿机&#xff0c;凭借其强大的算力和高效的能效比&#xff0c;成为了矿工们…

36.2Linux单总线驱动DS18B20实验(详细讲解代码)_csdn

想必看过我很多次博客的同学&#xff0c;都知道了编写驱动的流程&#xff01; 这里我们还是按照以前的习惯来一步一步讲解&#xff01; 单总线驱动&#xff0c;在F103和51单片机的裸机开发中是经常见的。 linux驱动代码编写实际上就是&#xff0c;端对端的编程&#xff01; 就是…

【杂类】应对 MySQL 处理短时间高并发的请求:缓存预热

一、什么是缓存预热&#xff1f;1. 核心概念​​缓存预热&#xff08;Cache Warm-up&#xff09;​​ 是指在系统​​正式对外提供服务之前​​&#xff0c;或​​某个高并发场景来临之前​​&#xff0c;​​主动​​将后续极有可能被访问的热点数据从数据库&#xff08;MySQL…

点评项目(Redis中间件)第三部分短信登录,查询缓存

可以直接看后面Redis实现功能的部分基于session实现短信登录发送短信验证码前端请求样式业务层代码Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {Overridepublic Result sendCode(String phone, HttpSession se…

线性方程求解器的矩阵分裂

大概思路是对的&#xff0c;但是查老师可能会出现幻觉&#xff0c;小心食用 &#x1f603;这段代码是在初始化迭代法求解器&#xff0c;构建迭代矩阵和分裂矩阵。以下是详细解释&#xff1a; if init_from_func or init_from_input:# 1. 存储刚度矩阵self.stiff_p stiff_p# 2.…

【Beetle RP2350】雷达模块 CEM5861G-M11 开发使用指南

一、硬件介绍 1、产品特点 Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你开发板&#xff0c;双核双架构设计&#xff08;支持 Arm Cortex-M33或Hazard3 RISC-V内核&#xff09;为开发者提供灵活的性能配置。 双核双架构&#xff0c;性能自由切换 采…

高通Android 13 开机黑屏问题深度剖析与解决方案

1. 问题概述 在 Android 13 系统定制化开发过程中&#xff0c;开机流程的调试与优化颇具挑战性。一个典型问题是&#xff1a;当开机动画播放完毕后&#xff0c;设备会先出现数秒黑屏&#xff0c;然后才进入锁屏界面。本文基于开机日志分析&#xff0c;结合实际项目经验&#x…

腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商

2025年9月9日&#xff0c;腾讯正式推出自研AI CLI工具CodeBuddy code&#xff0c;成为国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商。这一创新不仅填补了国内市场在全形态AI编程工具领域的空白&#xff0c;更以编码时间缩短40%、AI生成代码占比超50%的硬核数据&…

零基础学习QT的第二天-组件基础知识

组件声明以及设置属性 所有的组件的基类为&#xff1a;QtObject&#xff0c;在c中名称为&#xff1a;QObject。 在qml和c名称有所区别&#xff0c;例如在Qml中QtObject&#xff0c;在C会省略一个t(QObject) 声明组件的方式&#xff1a; 组件名 {属性名:值}在实际应用中&#xf…

像素图生成小程序开发全解析:从图片上传到Excel图纸

像素图生成小程序开发全解析&#xff1a;从图片上传到Excel图纸 前言 在数字化创作和工艺设计领域&#xff0c;像素图生成工具具有广泛的应用价值&#xff0c;无论是十字绣设计、LED灯阵布置还是复古游戏美术创作。本文将详细解析一个功能完整的像素图生成小程序的开发过程&…

mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南

1. 项目基础介绍 go-stock 是一个基于Wails和NaiveUI开发的AI赋能股票分析工具。旨在为用户提供自选股行情获取、成本盈亏展示、涨跌报警推送等功能。它支持A股、港股、美股等市场&#xff0c;能够进行市场整体或个股的情绪分析、K线技术指标分析等功能。所有数据均保存在本地…

spring-单例bean是线程安全的吗

其中可修改的成员变量有线程不安全问题&#xff0c;不可修改的无状态的 userService是没有线程安全问题的 spring框架中有一个 Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。 不是线程安全的&#xff0c;一般来说&#xff0c;我们在bean中注入的对象都是无状…

CM1033系列 3串锂电池保护IC - 高精度±25mV 内置延时 多型号可选(含铁锂)

1. 核心亮点 高精度多重保护&#xff1a;专为3串电池组设计&#xff0c;提供过充、过放、三级过流&#xff08;含短路&#xff09;、充电过流及断线检测等全方位保护&#xff0c;电压检测精度高达25mV。超低功耗&#xff1a;工作电流典型值仅7μA&#xff0c;休眠电流低至4μA&…

【第23话:定位建图】SLAM后端优化方法详解

SLAM 后端优化方法详解 SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;后端优化是SLAM系统中的关键环节&#xff0c;负责对前端输出的传感器数据进行全局一致性优化&#xff0c;消除累积误差。后端通常基于图优化框架&#xff08;如g2o、GTSAM&#xff09…

MongoDB 备份与恢复终极指南:mongodump 和 mongorestore 深度实战

MongoDB 备份与恢复终极指南&#xff1a;mongodump 和 mongorestore 深度实战引言&#xff1a;数据守护者的使命第一部分&#xff1a;基础概念与核心原理1.1 逻辑备份 vs. 物理备份&#xff1a;根本性的区别1.2 核心工具介绍第二部分&#xff1a;mongodump 备份实战详解2.1 基础…

鸿蒙的“分布式架构”理念:未来操作系统的关键突破

一、引言&#xff1a;为什么需要分布式架构&#xff1f; 随着移动互联网的发展&#xff0c;智能设备不断普及。用户身边可能同时拥有 手机、平板、PC、电视、手表、耳机、智能音箱、车机 等多种终端设备。 但现实中&#xff0c;我们常遇到以下问题&#xff1a; 不同设备系统割…

MySQL 事务管理与锁机制:解决并发场景下的数据一致性问题

前言在电商下单、金融转账、库存扣减等并发业务场景中&#xff0c;若不控制数据操作的原子性与隔离性&#xff0c;极易出现 “超卖”“重复扣款”“脏读数据” 等问题。MySQL 的事务管理与锁机制是解决这些问题的核心技术&#xff0c;也是后端开发者必须掌握的生产环境能力。本…