分析 Docker 磁盘占用
以下是分析 Docker 磁盘占用的详细步骤和工具指南,帮助开发者快速定位和清理冗余数据:
1. 查看 Docker 磁盘使用概览
docker system df
输出说明:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 10 5.2GB 1.1GB (21%)
Containers 12 5 1.3GB 800MB (61%)
Local Volumes 7 3 2.5GB 1.8GB (72%)
Build Cache 45 0 3.7GB 3.7GB (100%)
各部分含义解析
1)Images(镜像)
- TOTAL:系统中存在的镜像总数(包括中间层镜像)。
- ACTIVE:当前被容器使用的镜像数量。
- SIZE:所有镜像占用的总磁盘空间。
- RECLAIMABLE:可回收的镜像空间(未被任何容器使用的镜像)。示例:1.234GB(52%)表示可以通过
docker image prune
释放 1.234GB,占总镜像空间的 52%。
2)Containers(容器)
- TOTAL:系统中存在的容器总数(包括已停止的容器)。
- ACTIVE:当前正在运行的容器数量。
- SIZE:所有容器的可写层占用的总空间(容器内文件的变更)。
- RECLAIMABLE:已停止容器的可写层空间。示例:100.2MB(81%)表示可以通过
docker container prune
释放 100.2MB。
3)Local Volumes(本地卷)
- TOTAL:系统中存在的本地卷总数。
- ACTIVE:当前被容器挂载的卷数量。
- SIZE:所有卷占用的总磁盘空间。
- RECLAIMABLE:未被任何容器使用的卷空间。示例:456.7MB(80%)表示可以通过
docker volume prune
释放 456.7MB。
4)Build Cache(构建缓存)
- TOTAL:Docker 构建过程中创建的缓存层总数。
- ACTIVE:当前被新构建复用的缓存层数量。
- SIZE:所有构建缓存占用的总空间。
- RECLAIMABLE:未被使用的缓存空间(默认全部可回收)。示例:3.456GB(100%)表示可以通过
docker builder prune
释放全部缓存。
2. 定位具体占用项
(1) 镜像占用分析
# 列出所有镜像(按大小排序)
docker images --format "{{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k 4 -h -r# 查看悬空镜像(未被任何容器引用的中间层)
docker images --filter "dangling=true"
(2) 容器占用分析
# 列出所有容器(包括已停止的,显示磁盘占用)
docker ps -a --size
输出关键列:
-
SIZE
: 容器可写层大小(增量修改)。 -
VIRTUAL SIZE
: 容器关联镜像的总大小。
(3) 数据卷占用分析
# 列出所有数据卷
docker volume ls# 查看数据卷详情(包括挂载点和占用空间)
docker system df -v
(4) 构建缓存分析
# 查看构建缓存(包括未使用的中间层)
docker builder prune --dry-run
(5) 日志文件分析
# 查看容器日志文件占用(默认路径)
sudo du -sh /var/lib/docker/containers/*/*-json.log# 查看单个容器的日志大小
docker logs <容器名> --since 1h | wc -c # 统计最近1小时的日志大小
3. 清理策略
(1) 清理未使用的镜像
# 删除悬空镜像
docker image prune# 删除未被容器引用的所有镜像
docker image prune -a
(2) 清理停止的容器
# 删除所有已停止的容器
docker container prune# 删除指定条件的容器(如退出状态为0的)
docker rm $(docker ps -aq --filter "status=exited")
(3) 清理数据卷
# 删除未使用的数据卷
docker volume prune
(4) 清理构建缓存
# 删除所有构建缓存
docker builder prune --all
(5) 清理日志文件
-
手动清理:
# 清空日志文件(不删除文件) truncate -s 0 /var/lib/docker/containers/<容器ID>/*-json.log
-
自动轮转:
在容器启动时限制日志大小(docker run
或docker-compose.yml
):logging:driver: "json-file"options:max-size: "10m" # 单个日志文件最大10MBmax-file: "3" # 最多保留3个日志文件
4. 深度分析工具
(1) 可视化工具 - dive
分析镜像层内容,定位大文件:
# 安装 dive
curl -sS https://webinstall.dev/dive | bash# 分析镜像
dive <镜像名>
(2) 目录分析工具 - ncdu
扫描 Docker 存储目录:
# 安装 ncdu
sudo apt install ncdu# 分析 Docker 数据目录
sudo ncdu /var/lib/docker
5. 预防磁盘占满
(1) 配置 Docker 存储驱动
编辑 /etc/docker/daemon.json
,限制存储大小(适用于 devicemapper
或 overlay2
):
{"storage-driver": "overlay2","storage-opts": ["overlay2.size=20G" # 限制存储池大小]
}
(2) 监控告警
-
使用
cAdvisor
+Prometheus
+Grafana
监控 Docker 资源。 -
设置磁盘空间阈值告警(如超过 80% 触发清理脚本)。
6. 常见问题
问题 1:/var/lib/docker
占用过大
原因:镜像层、日志或未清理的容器堆积。
解决:
# 清理所有未使用的 Docker 资源
docker system prune --all --volumes
问题 2:容器日志持续增长
原因:未配置日志轮转或应用日志输出过多。
解决:配置 max-size
和 max-file
参数,或改用非阻塞日志驱动(如 journald
)。
7. 注意事项
谨慎使用 -a
标志:prune -a
会删除所有未使用的资源(如镜像、缓存),可能导致后续构建或部署变慢。
监控关键资源:重点关注 Build Cache 的大小,尤其是频繁进行 Docker 构建的环境。
生产环境慎用:在生产环境清理资源前,建议先备份重要数据,避免意外删除。
总结
资源类型 | 占用位置 | 清理命令 |
---|---|---|
镜像 | /var/lib/docker/image | docker image prune -a |
容器 | /var/lib/docker/containers | docker container prune |
数据卷 | /var/lib/docker/volumes | docker volume prune |
日志 | 容器日志文件 | 配置日志轮转 |
通过定期检查(如每周执行 docker system prune
)和合理配置,可有效控制 Docker 磁盘占用。
相关文章:
分析 Docker 磁盘占用
以下是分析 Docker 磁盘占用的详细步骤和工具指南,帮助开发者快速定位和清理冗余数据: 1. 查看 Docker 磁盘使用概览 docker system df 输出说明: TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 15 …...

HarmonyOS NEXT 免费无广告看电影app:从想法到实现的经验总结
学习一项新技能,最好也是最快的方法就是动手实战。学习鸿蒙也一样,给自己定一个小目标,直接找项目练,这样进步是最快的。最近,我在网上看到360周董的一句话:“想干什么就去干,干得烂总比不干强!…...

代码随想论图论part06冗余连接
图论part06 冗余连接 代码随想录 冗余边就是已经边已经在并查集里了,从图的角度来说构成了环(冗余连接2要用到这个概念) 代码其他部分为:并查集初始化,查根,判断是否在集合里,加入集合 冗余…...
MySQL 数据库操作
目录 一、 MySQL 数据库介绍 二、 MySQL 库操作 1. 系统数据库 2. 数据库操作 三、 MySQL 表操作 1. 表介绍 2. 查看表 3. 创建表 4. 查看表结构 5. 修改表 6. 删除表 四、 MySQL 数据操作 4.1 单表查询 4.2 多表查询 一、 MySQL 数据库介绍 数据库目前标准的指令…...

企业高性能WEB服务器—Nginx
Nginx介绍 Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。 具有高并发(特别是静态资源)、占用系统资源少的特性。它不仅是Web服务软件,还具有反向代理负载均衡功能和缓存服务功能 具备如下基本特性 可针对静态资…...
C++跨平台开发实践:深入解析与常见问题处理指南
一、跨平台开发基础架构设计 1.1 跨平台架构的核心原则 分层设计模式: 平台抽象层(PAL):将平台相关代码集中管理 核心逻辑层:完全平台无关的业务代码 平台实现层:针对不同平台的特定实现 代码组织最佳实践: pro…...

Python MNE-Python 脑功能磁共振数据分析
一、什么是Python MNE-Python 脑功能磁共振数据分析 为大脑功能磁共振成像数据分析工具,致力于为神经科学研究提供便捷、高效的数据分析处理工具。MNE-Python提供了处理和分析脑电图(EEG)、…...

DevExpressWinForms-AlertControl-使用教程
文章目录 AlertControl-使用教程一、将 AlertControl 添加到 Form二、编辑 AlertControl 的 HtmlTemplateHTML Template Editor介绍编辑HTML Template 三、使用AlertControl弹出AlertAlert中的按钮事件获取 Alert 标题等信息向Alert传递参数 总结源码 AlertControl-使用教程 一…...
SurfSense开源程序是NotebookLM / Perplexity / Glean的开源替代品,连接到外部来源,如搜索引擎
一、软件介绍 文末提供程序和源码下载 虽然 NotebookLM 和 Perplexity 等工具令人印象深刻,并且对于对任何主题/查询进行研究都非常有效,但 SurfSense 通过与你的个人知识库集成来提升这种能力。它是一个高度可定制的 AI 研究代理,连接到外…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.4 可视化报告输出
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 电商数据分析实战:基于PostgreSQL的可视化报告生成全流程9.4 可视化报告输出9.4.1 可视化报告设计框架9.4.1.1 报告目标与受众9.4.1.2 数据准备与指标体系 9.4.2…...

屎上雕花系列-2nd
以下为“屎上雕花”的尝试2nd 使用Deepseek扩容而来,我竟然没有找到明显的错误,太强大了,工作改变生活了 LeCroy 以太网与 SAN 网络测试解决方案 硬件平台一:Xena 以太网流量生成器 Xena 以太网流量生成器是一款高性能的网络测…...

MCP专题| 突破LLM三大瓶颈!模型上下文协议(MCP)如何重塑AI交互体验?
最近引爆了整个AI圈的Model Context Protocol(MCP)到底是什么?你是否也和小编一样一头雾水,不是说好的LLM风潮呢,怎么现在变成通信协议啦?最近小编也是找到一篇神仙综述,带你一遍搞清什么是MCP的…...

我的AD快捷键方案【留存】
留存我的快捷键方案文件,以便换电脑的时候能够快速导入快捷键。 我的快捷键文件: 通过网盘分享的文件:JB20250509.DXPPrf 链接: https://pan.baidu.com/s/1t6V0GjdGFPNSFydP5Z_tfg?pwde4xs 提取码: e4xs 复制这段内容后打开百度网盘手机Ap…...
uni-app,小程序自定义导航栏实现与最佳实践
文章目录 前言为什么需要自定义导航栏?基本实现方案1. 关闭原生导航栏2. 自定义导航栏组件结构3. 获取状态栏高度4. 样式设置 内容区域适配跨平台适配要点iOS与Android差异处理 常见导航栏效果实现1. 透明导航栏2. 滚动渐变导航栏3. 自定义返回逻辑 解决常见问题1. …...
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
CONDA_SUBDIRosx-64 conda create -n py37_env python3.7 是一个用于创建特定架构环境的命令,主要针对 macOS 系统。下面为你详细解析它的功能和作用: 命令功能解析 这个命令的主要功能是创建一个名为 py37_env 的 Conda 环境,并且指定该环…...

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵
Edwards爱德华STP泵软件用于操作和监控涡轮分子泵...
vue内写websocket实时订阅
首先安装插件reconnecting-websocket 或者不安装也可以,这个插件只是在断连之后可以重新连接 引入插件 import ReconnectingWebSocket from reconnecting-websocket;。 js文件: export const WebSocketClass (url, params, successFn, errorFn, clo…...

QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。
(112) (113)模仿随书老师给的源代码搭建的, LCD 显示的部分不一样 : (114)以下开始代码完善: 关联定时器的信号与槽函数 : (115)…...
在R语言中如何将列的名字改成别的
在 R 中,更改数据框(data frame)中列的名字可以通过多种方法实现。以下是几种常见的方法: 方法 1:使用 names() 函数 names() 函数可以获取或设置数据框的列名。 示例 假设我们有一个数据框 data: dat…...
北斗导航 | RTKLib中模糊度解算详解,公式,代码
模糊度解算 一、模糊度解算总体流程二、核心算法与公式推导1. **双差模糊度定义**2. **浮点解方程**三、LAMBDA算法实现细节1. **降相关变换(Z-transform)**2. **整数最小二乘搜索**3. **Ratio检验**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集选择策…...

02 mysql 管理(Windows版)
一、启动及关闭 MySQL 服务器 1.1 通过 “服务” 管理工具 winr打开运行,输入services.msc 找到MySQL80,这个是我们在安装mysql的时候给的服务的名称,具体见文章mysql 安装 右键选择启动或者停止。 1.2 通过命令提示符 1.2.1 关闭命令…...

不同渲染任务,用CPU还是GPU?
一、CPU与GPU渲染的核心差异与选型建议 CPU渲染的核心优势与适用场景 复杂场景处理能力:CPU凭借强大的多核性能(如AMD Threadripper 3990x的64核)和高内存容量(最高支持512GB),擅长处理影视级光线追踪、全…...
uv简单使用
通过uv创建项目和虚拟环境 初始化项目 uv init --package my-project 初始化一个名为 my-project 的新项目,并生成必要的文件结构。 创建虚拟环境 uv venv .venv 激活虚拟环境 # For Windows .venv\Scripts\activate# For macOS/Linux source .venv/bin/acti…...
LeetCode 54.螺旋矩阵遍历的两种方法详解与对比
文章目录 方法一:边界调整法(逐层收缩)实现思路代码实现复杂度分析 方法二:矩阵旋转法(逐层剥离)实现思路代码实现复杂度分析 方法对比总结 本文介绍两种Java实现螺旋矩阵遍历的算法,并对其时间…...
手撕红黑树的 左旋 与 右旋
一、为什么需要旋转? 在红黑树中,插入或删除节点可能会破坏其五条性质,比如高度不平衡或连续红节点。 为了恢复红黑性质,我们采用局部旋转来“调整树形结构”,保持平衡。 二、旋转本质是“局部变形” 左旋和右旋不会…...
RGB矩阵照明系统详解及WS2812配置指南
RGB矩阵照明系统详解及WS2812配置指南 一、RGB矩阵照明简介 RGB矩阵照明是一种强大的功能,允许使用外部驱动器驱动的RGB LED矩阵为键盘增添绚丽的灯光效果。该系统与RGBLIGHT功能无缝集成,因此您可以使用与RGBLIGHT相同的键码来控制它,操作…...

硅基计划 学习总结 拾贰
一、二级指针 难道指针也有分等级的吗,我们学过的指针要存放变量的地址的,那二级指针是干嘛的呢? 一级指针:int a 10; int *pa &a; 指针变量,它终究是个变量,也有自己的地址 那我们以后是不是可以通…...
RabbitMQ事务机制
在RabbitMQ中,生产者为了确保消息发送成功,一种是使用 confirm 确认机制,另一种就是使用事务机制,事务机制就是允许生产者在发送消息时,将多个消息操作作为一个原子单元进行处理,要么所有操作都成功执行&am…...

【C语言指针超详解(三)】--数组名的理解,一维数组传参的本质,冒泡排序,二级指针,指针数组
目录 一.数组名的理解 二.使用指针访问数组 三.一维数组传参的本质 四.冒泡排序 五.二级指针 六.指针数组 6.1--指针数组的定义 6.2--指针数组模拟二维数组 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C方向学习者 &…...
主机漏洞扫描:如何保障网络安全及扫描原理与类型介绍?
主机漏洞扫描是保障网络安全的关键办法,它能对主机展开全面检测,借助这种检测能及时找出潜在的安全风险,从而避免遭受黑客攻击。下面会为你具体介绍主机漏洞扫描的有关事项。 扫描原理 主机漏洞扫描要借助漏洞库,还要借助扫描器…...