要让docker正确使用overlay2,需在/etc/docker/daemon.json中显式配置storage-driver为overlay2并启用override_kernel_check=true,同时确保内核≥4.0、overlay模块已加载、文件系统支持d_type(xfs需ftype=1或ext4≥4.19),缺一不可。
要让 docker 正确使用 overlay2 存储驱动,核心是通过 /etc/docker/daemon.json 显式声明并规避自动降级风险,同时确保底层内核与文件系统兼容。这不是“加一行就完事”的配置,而是需要联动验证的最小可靠组合。
基础配置:显式启用 overlay2 并绕过内核检查
在 /etc/docker/daemon.json 中写入以下内容(注意 JSON 语法必须严格正确,末行不加逗号):
{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}
说明:
-
"storage-driver": "overlay2"强制使用 overlay2,避免 Docker 在启动时因内核版本略低或模块未加载而自动回退到 aufs 或 vfs 等低效驱动; -
"overlay2.override_kernel_check=true"仅在确认内核 ≥ 4.0 且已加载overlay模块时启用——这是生产环境常见做法,尤其在银河麒麟 V10、CentOS Stream 9 等系统上必备; - 若已有容器和镜像,切换前需备份
/var/lib/docker,因为更换驱动后原有数据不可见。
配套验证:确保 overlay2 能真正高效运行
仅改配置不够,overlay2 的性能依赖三个底层支撑点,缺一不可:
- 运行
lsmod | grep overlay,无输出则执行sudo modprobe overlay并写入/etc/modules-load.d/overlay.conf; - 检查
/var/lib/docker所在分区文件系统:df -T /var/lib/docker | awk 'NR==2 {print $2}';推荐 XFS(需挂载时带ftype=1)或较新内核下的 ext4(≥ 4.19); - 执行
docker info | grep -E "(Storage Driver|Backing Filesystem|Supports d_type)",确认输出为overlay2、xfs或ext4、true。
进阶加固:防止 overlay2 退化或失控
某些场景下 overlay2 会 silently 降级或写放大严重,可通过额外选项约束:
- 开启元数据拷贝加速:
"overlay2.mountopt=metacopy=on"(需内核 ≥ 4.19),减少首次写入大文件时的阻塞; - 限制单容器 upperdir 容量,防磁盘打满:
"overlay2.size=30G"(加在storage-opts数组里); - 若使用 XFS,建议挂载参数含
noatime,nodiratime,logbufs=8,logbsize=256k,提升日志缓冲效率。
生效与排错
-
sudo systemctl daemon-reload(重载 systemd 配置); -
sudo systemctl restart docker(重启守护进程,旧容器会停止); - 启动失败?立即检查
sudo journalctl -u docker --since "1 hour ago" | head -20,常见错误是 JSON 格式错误或overlay模块未加载。











