🚀 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 复制,无需破坏原目录 |
可靠性 | 高,可随时回滚 |
安全性 | 原数据保留,风险低 |
适用场景 | 加新磁盘,空间扩容 |