Overlay2 是 Docker 17.06+ 默认且唯一推荐的存储驱动,需满足内核≥4.0、xfs(ftype=1)或 extfs、d_type=true;迁移须停服备份后清理重配;Docker 27.0+ 要求删除 /var/lib/docker/image/overlay2 元数据目录以避免启动失败。

Overlay2 不是“可切换的选项”,而是 Docker 17.06+ 默认且唯一推荐的存储驱动;所谓“在 overlay2 之间平滑切换”实际并不存在——overlay2 是单一驱动名称,没有多个版本或变体可供切换。真正需要关注的是:如何确保系统满足 overlay2 运行条件、如何从旧驱动(如 devicemapper)安全迁移、以及如何应对 Docker 27.0+ 对 overlay2 的弃用警告。
确认当前是否已启用 overlay2
执行 docker info,检查输出中:
-
Storage Driver: 显示为
overlay2(不是 overlay、aufs 或 devicemapper) -
Backing Filesystem: 应为
xfs或extfs(推荐 xfs +ftype=1) -
Supports d_type: 必须为
true(xfs 下需mkfs.xfs -n ftype=1创建)
从 devicemapper 等旧驱动迁移到 overlay2
这不是运行时切换,而是停服→清理→重配置→重启的迁移流程:
- 停止所有容器和 docker daemon:
sudo systemctl stop docker - 备份现有数据:
sudo cp -a /var/lib/docker /var/lib/docker.backup - 清空原存储目录:
sudo rm -rf /var/lib/docker/{containers,images,overlay2}(保留network和volumes可选) - 修改
/etc/docker/daemon.json,显式指定驱动(虽默认即 overlay2,但建议明确):{"storage-driver": "overlay2"} - 启动 daemon:
sudo systemctl start docker;新镜像和容器将全部使用 overlay2 存储
应对 Docker 27.0+ 的 overlay2 弃用提示
自 Docker 27.0 起,daemon 检测到 /var/lib/docker/image/overlay2/ 目录会直接拒绝启动,并报错:FATAL: storage driver overlay2 is deprecated and disabled in v27+
这不是 overlay2 驱动本身被移除,而是 Docker 已将镜像元数据后端完全移交 containerd —— overlay2 仍作为底层 snapshotter 继续工作,但不再由 daemon 自管 layerdb。
- 解决方法:删除旧元数据目录(非数据目录!):
sudo rm -rf /var/lib/docker/image/overlay2 - 保留
/var/lib/docker/overlay2/(实际层数据)和/var/lib/docker/containerd/(新后端) - 重启 daemon 即可正常运行;镜像拉取、构建、运行全部不受影响
验证 overlay2 是否健康运行
运行一个容器后,检查其挂载结构:
docker run -d --name test nginxdocker inspect test --format='{{.GraphDriver.Data.LowerDir}} {{.GraphDriver.Data.UpperDir}}'- 应看到冒号分隔的多个
/var/lib/docker/overlay2/xxx/diff(lowerdir)和单个/var/lib/docker/overlay2/yyy/diff(upperdir) -
mount | grep overlay应显示类似:overlay on /var/lib/docker/overlay2/yyy/merged type overlay (rw,relatime,lowerdir=...,upperdir=...,workdir=...)



















