最稳妥、官方推荐的方式是通过修改 /etc/docker/daemon.json 中的 data-root 参数。需先停止 docker 服务,创建并授权新目录,若有存量数据则用 rsync 迁移,再写入配置并重启验证;禁用软链接或 --data-root 启动参数等非标准方式。
安装 docker engine 后修改默认存储目录,最稳妥、官方推荐的方式是通过 /etc/docker/daemon.json 配置 data-root 参数。这不是“安装时配置”,而是安装完成、首次启动前或停服后调整——因为 docker 服务一旦运行,/var/lib/docker 就被占用,直接改路径会失败或数据损坏。
安装后立即配置(推荐:适用于全新安装、无存量数据)
如果刚装完 Docker Engine,还没拉镜像、没启容器,可跳过迁移步骤,直接配置新路径:
- 确保 Docker 服务未运行:
sudo systemctl is-active docker应返回inactive;若已启动,先执行sudo systemctl stop docker - 创建目标目录(例如挂载在大容量盘上的
/mnt/data/docker):sudo mkdir -p /mnt/data/docker && sudo chown root:root /mnt/data/docker - 写入配置:
echo '{"data-root": "/mnt/data/docker"}' | sudo tee /etc/docker/daemon.json - 启动服务:
sudo systemctl start docker - 验证:
docker info | grep "Docker Root Dir"应显示/mnt/data/docker
已有数据需迁移(常见场景)
若已运行过 Docker,/var/lib/docker 中有镜像、容器或卷,必须安全迁移数据,不能仅改配置:
- 彻底停服务:
sudo systemctl stop docker.socket && sudo systemctl stop docker - 用
rsync迁移(保留权限、时间戳、硬链接):sudo rsync -aP /var/lib/docker/ /mnt/data/docker/ - 确认新目录属主为
root:root,且父路径(如/mnt/data)已持久挂载(写入/etc/fstab),否则重启后路径不可达 - 配置
data-root并重启,方法同上
不建议的替代方式
软链接或修改 docker.service 添加 --data-root 参数虽可行,但存在隐患:
- 软链接方式依赖文件系统行为,SELinux 或某些容器运行时可能拒绝访问链接目标
- service 文件硬改易被包管理器覆盖(如 yum/dnf 升级后重置),且不同发行版路径不一致(CentOS 在
/usr/lib/systemd/system/,Ubuntu 可能需 override.conf) -
--graph参数在 Docker 17.05+ 已弃用,仅--data-root受支持;混用graph和data-root会导致启动失败
关键检查点
无论哪种方式,务必确认三点:
- 新路径所在分区使用
ext4或xfs等支持overlay2的文件系统(避免 FAT32/NFS 默认挂载) - 目录权限为
755,属主属组为root:root(Docker 守护进程以 root 身份运行) -
/etc/docker/daemon.json是合法 JSON(无尾逗号、引号闭合),可用jq . /etc/docker/daemon.json校验











