overlay2 与层的落盘
多数 Linux 环境上容器运行时使用 overlay2 存储驱动:镜像层与容器的可写层都落在数据目录的对应子目录里,容器内修改文件不会污染镜像层。理解这一点有助于排查磁盘占用增长、层累积,以及「删了文件空间却没降下来」这类常见疑问。
基本信息
| 用途 | 理解镜像层与容器层的落盘方式 |
|---|---|
| 数据目录 | 数据根目录下的存储子目录 |
| 查看驱动 | 通过环境信息命令读取驱动字段 |
| 层累积 | 容器内删除的文件在宿主层仍留有记录 |
| 适用平台 | 主流 Linux 发行版 |
典型使用场景
- 排查磁盘占用增长对应的层来源
- 分析容器内删了文件但空间未释放的问题
- 理解镜像层与容器可写层的区别
- 核对节点实际使用的存储驱动
- 评估数据目录所在分区的容量规划
查看与核对
查看与核对
docker info -f '{{.Driver}}' # 查看当前存储驱动
docker info -f '{{json .DriverStatus}}' # 驱动状态与空间信息
sudo ls /var/lib/docker/overlay2 | head -5 # 查看层目录,需要管理员权限
sudo df -h /var/lib/docker # 数据目录所在分区水位对象与含义
| 对象 | 含义 | 注意 |
|---|---|---|
| 镜像层 | 只读的共享层 | 多个容器可以共用 |
| 容器可写层 | 每个容器独有 | 所有写入都落在这一层 |
| 删除记录 | 以特殊标记表示删除 | 原始数据在底层仍然存在 |
| 数据目录 | 层与元数据的落盘位置 | 磁盘告警先看该分区 |
容器内删除文件在宿主层仍会留下删除标记;镜像很小但占用不降,往往是进程仍持有已删除文件的句柄。
不要手工删除数据目录下的内容:元数据与实际目录不一致会导致守护进程异常,清理应当走容器侧命令。
排障方向
- 空间异常先看数据目录所在分区的水位与增长趋势
- 占用不降时检查是否有进程持有已删除文件的句柄
- 多个容器共用镜像层时,删除镜像前确认引用关系
- 把数据目录分区纳入监控,避免只监控根分区