最稳妥方式是修改/etc/docker/daemon.json中的data-root参数:先停服务,再用rsync迁移/var/lib/docker到新路径,配置data-root后重启验证;禁用软链接或启动参数改法,避免silent失效或弃用风险。
直接修改 /etc/docker/daemon.json 中的 data-root 字段,是最标准、最稳妥的方式。它会整体改变 docker 的数据根目录,包括镜像、容器、卷、网络等所有运行时数据的存放位置。
确认当前路径并停服务
先查清楚默认在哪,再安全停机:
- 运行
docker info | grep "Docker Root Dir",记下当前路径(通常是/var/lib/docker) - 执行
sudo systemctl stop docker.socket和sudo systemctl stop docker.service,确保完全停止 - 用
systemctl is-active docker验证状态为inactive
准备新目录并迁移数据
选一个空间充足、挂载稳定的分区(如 /mnt/data 或 /data):
- 创建目录:
sudo mkdir -p /mnt/data/docker - 设属主:
sudo chown -R root:root /mnt/data/docker(Docker 进程必须有写权限) - 若原目录有重要数据,用
rsync -aP /var/lib/docker/ /mnt/data/docker/安全迁移 - 迁移后建议保留原目录暂不删除,方便回退
编辑 daemon.json 并重启
配置文件必须是合法 JSON,不能有注释或语法错误:
- 打开或新建:
sudo nano /etc/docker/daemon.json - 写入内容(注意双引号、无逗号结尾):
{"data-root": "/mnt/data/docker"} - 已有其他配置(如
registry-mirrors)就合并进去,保持 JSON 结构正确 - 语法检查:
jq . /etc/docker/daemon.json > /dev/null || echo "格式错误" - 重启:
sudo systemctl daemon-reload && sudo systemctl start docker - 验证:
docker info | grep "Docker Root Dir"应显示新路径
关键注意事项
几个容易出问题但又常被忽略的点:
- 新路径的父目录(如
/mnt/data)必须已挂载且持久化——写进/etc/fstab,否则重启后 Docker 启动失败 - 不要同时存在
graph字段,data-root优先级更高,共存可能引发意外行为 - 避免使用 NFS、FAT32 等不支持 overlay2 的文件系统;推荐 ext4 或 xfs
- Windows Docker Desktop 用户对应路径是
C:\Users\[用户名]\.docker\daemon.json,逻辑一致











