🚀 Docker 数据目录迁移完整流程
适用于将 Docker 默认数据目录 /var/lib/docker 迁移到新挂载盘(如 /data/raid1),在不动原始目录的前提下安全迁移,适合生产环境部署。
🧾 场景假设
- 原数据目录:/var/lib/docker
- 新磁盘挂载路径:/data/raid1
- 目标迁移路径:/data/raid1/docker
🧱 一、准备工作
docker info | grep "Docker Root Dir"输出:
Docker Root Dir: /var/lib/docker⛔ 二、停止 Docker 服务
sudo systemctl stop docker📦 三、复制 Docker 数据到新目录
sudo mkdir -p /data/raid1/docker
sudo rsync -aHAXP /var/lib/docker/ /data/raid1/docker/📘 参数解释:
| 参数 | 作用 | 
|---|---|
| -a | 归档模式,保留所有元数据等效于 -rlptgoD | 
| -H | 保留硬链接(Docker 镜像层关键) | 
| -A | 保留 ACL 权限 | 
| -X | 保留扩展属性(xattr) | 
| -P | 显示进度 + 支持断点续传 | 
⚙️ 四、修改 Docker 配置文件
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "registry-mirrors": ["https://docker.xuanyuan.me"],
  "data-root": "/data/raid1/docker"
}
EOF🔐 五、检查权限
sudo chown -R root:root /data/raid1/docker
sudo chmod -R u+rwX /data/raid1/docker🔄 六、启动 Docker
sudo systemctl daemon-reexec
sudo systemctl start docker🔍 七、验证迁移结果
docker info | grep "Docker Root Dir"
docker images
docker ps -a- 查看目录是否生效:
- 列出镜像和容器:
🛡 八、保留原目录以便回滚
sudo mv /var/lib/docker /var/lib/docker.bak🔙 九、回滚方案(如果失败)
{
  "registry-mirrors": ["https://docker.xuanyuan.me"],
  "data-root": "/var/lib/docker"
}
sudo systemctl daemon-reexec
sudo systemctl start docker📌 十、总结
| 项目 | 说明 | 
|---|---|
| 迁移方式 | rsync 复制,无需破坏原目录 | 
| 可靠性 | 高,可随时回滚 | 
| 安全性 | 原数据保留,风险低 | 
| 适用场景 | 加新磁盘,空间扩容 |