1. 简介
在使用 Docker 时,很多开发者可能会遇到磁盘空间不足的问题,尤其是在使用 OverlayFS 作为存储驱动的环境下。本文将介绍如何准确查看 OverlayFS 上的可用磁盘空间,并结合 Docker 的工作机制进行说明。
我们将先了解 OverlayFS 的工作原理,再介绍几个实用的命令来帮助我们掌握磁盘使用情况。
2. OverlayFS 的基本原理
Docker 利用 Linux 的 OverlayFS 实现容器文件系统的分层机制。OverlayFS 的核心在于它通过两个目录合并出一个统一的视图:
- lowerdir(只读层):通常是镜像的各个层级,不可修改。
- upperdir(读写层):容器运行时的可写层,所有对文件系统的修改都发生在这里。
- merged 目录:将 lowerdir 和 upperdir 合并后的统一视图,也就是容器看到的文件系统。
如下图所示,Docker 容器的文件系统结构由镜像层(lowerdir)和容器层(upperdir)组成,最终通过 merged 目录呈现给容器使用:
✅ 读取优先级:当文件在 upperdir 和 lowerdir 都存在时,OverlayFS 会优先从 upperdir 读取。
✅ 删除机制:由于 lowerdir 是只读的,删除镜像层中的文件时,OverlayFS 会在 upperdir 中创建一个“whiteout”文件来屏蔽原文件。
3. 检查 OverlayFS 磁盘空间的方法
3.1 使用 docker system df
这是 Docker 自带的命令,用于查看 Docker 相关对象所占用的磁盘空间:
$ docker system df
输出示例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 17 15 1.196GB 570.7MB (47%)
Containers 31 0 53.58MB 53.58MB (100%)
Local Volumes 8 2 1.653GB 1.235GB (74%)
Build Cache 67 0 25.99kB 25.99kB
⚠️ 这个命令能帮助我们快速判断哪些资源可以清理(如未使用的镜像、停止的容器等)。
3.2 使用 df -h
这是一个标准的 Linux 命令,用于查看挂载点的磁盘使用情况:
$ df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on
tmpfs 391M 1,8M 389M 1% /run
/dev/vda3 24G 20G 3,1G 87% /
tmpfs 2,0G 0 2,0G 0% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
/dev/vda2 512M 6,1M 506M 2% /boot/efi
tmpfs 391M 116K 391M 1% /run/user/1000
overlay 24G 20G 3,1G 87% /var/lib/docker/overlay2/c49caf4c21324d27a5be076a5b0131f7cfb9b5200c0905190fa9fdb594013e3a/merged
overlay 24G 20G 3,1G 87% /var/lib/docker/overlay2/e446e8087dbd8270af8fc7f291003fa7744d436cb7f7442d32305928739d51b6/merged
✅ 关键点:
overlay
行表示 OverlayFS 的挂载情况。- 每个运行中的容器会对应一个
merged
目录。 Avail
字段表示当前剩余空间,可用于判断是否需要扩容或清理。
4. 总结
OverlayFS 是 Docker 默认的存储驱动之一,理解其工作机制有助于我们更好地管理容器环境。
✅ 核心要点总结:
- OverlayFS 使用 lowerdir(镜像层)和 upperdir(容器层)实现分层文件系统。
- 使用
docker system df
可查看 Docker 对象的总体磁盘使用情况。 - 使用
df -h
可查看 OverlayFS 的具体磁盘空间使用情况。 - OverlayFS 的 merged 目录是容器实际看到的文件系统。
⚠️ 踩坑提醒:OverlayFS 的磁盘空间受限于 Docker 所在的挂载点(如 /var/lib/docker
),如果发现空间不足,应优先考虑扩容或清理旧容器/镜像,而非仅仅删除容器文件。
通过这些命令,我们可以轻松掌握 Docker 容器环境下的磁盘使用情况,避免因磁盘空间不足导致的服务异常。