15.2.5 存储驱动与数据根目录配置
存储驱动决定镜像层与可写层的实现方式,直接影响性能与稳定性;数据根目录决定镜像、容器、构建缓存与日志的存放位置。生产环境建议统一使用 overlay2 并将 data-root 指向独立磁盘。
关键原理与选型要点#
- overlay2:依赖 OverlayFS,性能与兼容性均衡,推荐默认。
- XFS 要求 ftype=1;ext4 通常无需额外配置。
- 旧内核可能使用 devicemapper/aufs/btrfs/zfs,但维护成本更高。
查看与验证(含命令解释)#
# 查看当前存储驱动
docker info | grep -i "Storage Driver"
# 预期输出:Storage Driver: overlay2
# 查看 Docker 数据根目录
docker info | grep -i "Docker Root Dir"
# 预期输出:Docker Root Dir: /var/lib/docker
# 检查内核与文件系统(XFS 需 ftype=1)
uname -r
xfs_info /var/lib/docker | grep -i ftype
# 预期输出:ftype=1
配置示例(daemon.json)#
# 1) 编辑配置文件
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"storage-driver": "overlay2",
"data-root": "/data/docker",
"log-driver": "json-file",
"log-opts": { "max-size": "100m", "max-file": "3" }
}
EOF
# 2) 重新加载并重启
sudo systemctl daemon-reload
sudo systemctl restart docker
# 3) 验证配置生效
docker info | egrep -i "Storage Driver|Docker Root Dir"
# 预期:Storage Driver: overlay2,Docker Root Dir: /data/docker
迁移 data-root(完整步骤与可执行示例)#
# 1) 停止服务,防止写入
sudo systemctl stop docker
# 2) 准备新目录并迁移(保留权限、硬链接)
sudo mkdir -p /data/docker
sudo rsync -aHAX /var/lib/docker/ /data/docker/
# 3) 修改 daemon.json(同上示例中的 data-root)
# 4) 启动并验证
sudo systemctl start docker
docker info | grep -i "Docker Root Dir"
docker images
docker ps -a
# 预期:镜像与容器列表完整
常见报错与排查(含命令)#
1) overlay2 报错:xfs ftype=0
xfs_info /data | grep -i ftype
# 解决:重建 XFS 并启用 ftype=1(需备份数据)
# mkfs.xfs -n ftype=1 /dev/sdb1
2) SELinux 阻止访问
# 临时验证
sudo setenforce 0
# 持久修复(推荐)
sudo restorecon -Rv /data/docker
3) 空间或 inode 耗尽
df -h /data
df -i /data
docker system df
# 清理未使用资源
docker system prune -af
4) 迁移后权限问题
sudo chown -R root:root /data/docker
sudo chmod 711 /data/docker
小练习(含预期结果)#
1) 更改 data-root 并验证
- 将 data-root 改为 /data/docker,重启后 docker info 显示新路径。
- 运行 docker run --rm hello-world 成功。
2) 故障排查演练
- 人为将 /data/docker 权限改为 000,重启 Docker,观察报错日志:
sudo chmod 000 /data/docker
sudo systemctl restart docker
sudo journalctl -u docker -n 50
# 恢复权限后服务应恢复
sudo chmod 711 /data/docker
3) 容量清理
- 构建/拉取多个镜像后使用 docker system df 统计,再执行 docker system prune -af,比较前后占用变化。