最稳妥方式是修改/etc/docker/daemon.json中的data-root参数:先停服务,再用rsync迁移/var/lib/docker到新路径,配置data-root后重启验证;禁用软链接或启动参数改法,避免silent失效或弃用风险。

直接修改 Docker 的默认数据存储根路径,最稳妥、推荐的方式是通过 daemon.json 配置 data-root 参数。这是 Docker 官方支持的标准做法,兼容性强、语义清晰、无需软链接或服务文件硬改,且适用于 Docker 1.12+ 所有主流发行版(Ubuntu/CentOS/Debian 等)。
确认当前存储路径
先查看当前实际使用的根目录,避免误操作:
docker info | grep "Docker Root Dir"
输出类似 Docker Root Dir: /var/lib/docker,这就是你要替换的路径。
停用 Docker 服务
必须彻底停止 Docker,否则数据可能损坏或配置不生效:
- 执行:
sudo systemctl stop docker.socket - 再执行:
sudo systemctl stop docker.service - 验证是否已停:
systemctl is-active docker应返回inactive
准备新存储目录
选一个空间充足、挂载稳定的分区(如 /mnt/data 或 /home/docker-data),然后创建并授权:
- 创建目录:
sudo mkdir -p /mnt/data/docker - 设置属主(关键!Docker 进程需写入权限):
sudo chown -R root:root /mnt/data/docker - 确保磁盘格式支持 overlay2(如 ext4/xfs),不要用 FAT32 或 NFS 默认挂载(需加
noac等选项)
迁移已有数据(可选但强烈建议)
如果原 /var/lib/docker 中有重要镜像或容器,用 rsync 安全迁移:
sudo rsync -aP /var/lib/docker/ /mnt/data/docker/- 迁移后可校验:
sudo du -sh /var/lib/docker和sudo du -sh /mnt/data/docker对比大小 - 迁移完成,原目录可暂不删除,留作备份
配置 data-root 并重启
编辑或新建配置文件:
sudo nano /etc/docker/daemon.json- 写入(注意 JSON 格式,末尾不能有多余逗号):
{"data-root": "/mnt/data/docker"} - 保存退出,语法检查:
jq . /etc/docker/daemon.json > /dev/null || echo "JSON error" - 重启服务:
sudo systemctl daemon-reload && sudo systemctl start docker - 验证:
docker info | grep "Docker Root Dir"应显示新路径
不复杂但容易忽略:新路径的父目录(如 /mnt/data)必须已挂载且持久化(写入 /etc/fstab),否则重启后 Docker 可能因路径不可达而启动失败。











