1. 简介

在使用 Docker 时,很多开发者可能会遇到磁盘空间不足的问题,尤其是在使用 OverlayFS 作为存储驱动的环境下。本文将介绍如何准确查看 OverlayFS 上的可用磁盘空间,并结合 Docker 的工作机制进行说明。

我们将先了解 OverlayFS 的工作原理,再介绍几个实用的命令来帮助我们掌握磁盘使用情况。


2. OverlayFS 的基本原理

Docker 利用 Linux 的 OverlayFS 实现容器文件系统的分层机制。OverlayFS 的核心在于它通过两个目录合并出一个统一的视图:

  • lowerdir(只读层):通常是镜像的各个层级,不可修改。
  • upperdir(读写层):容器运行时的可写层,所有对文件系统的修改都发生在这里。
  • merged 目录:将 lowerdir 和 upperdir 合并后的统一视图,也就是容器看到的文件系统。

如下图所示,Docker 容器的文件系统结构由镜像层(lowerdir)和容器层(upperdir)组成,最终通过 merged 目录呈现给容器使用:

Docker OverlayFS

读取优先级:当文件在 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 容器环境下的磁盘使用情况,避免因磁盘空间不足导致的服务异常。


原始标题:How to Check Remaining Disk Space on Docker Overlay Filesystem