HoRain云--Docker数据迁移全攻略:轻松扩容系统盘

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
| 专栏名称 | 专栏介绍 |
| 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 | |
| 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! | |
| 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 | |
| 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 | |
| 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 | |
| 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

将 Docker 的默认数据存储位置从空间通常比较紧张的系统盘(如 /var/lib/docker)迁移到更大的数据盘,是一个常见的运维操作。下面我为你梳理了安全迁移的完整流程、关键决策点以及注意事项。
🔍 迁移流程一览
下图清晰地展示了数据迁移的核心步骤与关键选择,帮助你把握全局:
flowchart TD
A[开始Docker数据迁移] --> B{选择配置方法}
B --> C[使用 daemon.json<br>(推荐)]
B --> D[使用 systemd 服务文件]
C --> E[停止Docker服务]
D --> E
E --> F[备份与迁移数据]
F --> G[修改配置指向新路径]
G --> H[重启服务并验证]
H --> I{验证是否成功?}
I -- 是 --> J[清理旧数据<br>(可选)]
I -- 否 --> K[根据错误日志排查]
J --> L[迁移完成]
K --> L
📝 详细操作步骤
第一步:准备工作
-
确认当前存储位置
在开始之前,先查看当前的 Docker 数据目录。
docker info | grep "Docker Root Dir"通常会显示
Docker Root Dir: /var/lib/docker。 -
选择新的存储路径
选择一个磁盘空间充足的分区路径,例如
/home/docker-data或/data/docker。
第二步:执行迁移
-
停止 Docker 服务
这是至关重要的一步,目的是防止在迁移过程中有数据写入,导致不一致。
sudo systemctl stop docker # 在某些系统上,可能还需要停止docker.socket sudo systemctl stop docker.socket -
备份与迁移数据
-
强烈建议先备份:为防止迁移失败,先将原数据打包备份。
sudo tar czvf docker-backup.tar.gz /var/lib/docker/ -
迁移数据:使用
rsync或cp命令将数据复制到新目录。rsync更推荐用于大量数据迁移,因为它能显示进度并更好地保持文件属性。sudo mkdir -p /home/docker-data # 创建新目录 sudo rsync -av /var/lib/docker/ /home/docker-data/ # 使用rsync复制 # 或者使用 cp 命令 # sudo cp -a /var/lib/docker/* /home/docker-data/
-
-
修改 Docker 配置以指向新路径
这是核心配置步骤,主要有两种方法,推荐使用第一种(
daemon.json)。-
方法一:修改
/etc/docker/daemon.json(推荐)编辑或创建此文件,添加
data-root配置。sudo nano /etc/docker/daemon.json文件内容如下(如果文件已存在,请合并
data-root字段,避免冲突):{ "data-root": "/home/docker-data" } -
方法二:修改 systemd 服务文件
如果使用此法,需要编辑或创建 systemd 的 drop-in 文件。
sudo mkdir -p /etc/systemd/system/docker.service.d sudo nano /etc/systemd/system/docker.service.d/override.conf文件内容如下:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --data-root /home/docker-data修改后需要执行
sudo systemctl daemon-reload。
-
-
处理目录权限与安全模块
-
权限:确保 Docker 守护进程(通常是
root用户)对新目录有读写权限。sudo chown -R root:root /home/docker-data sudo chmod -R 755 /home/docker-data -
SELinux/AppArmor:如果系统启用了 SELinux 或 AppArmor,可能需要更新安全上下文或策略,否则 Docker 可能无法访问新路径。
-
对于 SELinux:
sudo chcon -R system_u:object_r:container_var_lib_t:s0 /home/docker-data -
对于 AppArmor:请根据系统策略进行调整。
-
-
-
重启 Docker 并验证
sudo systemctl start docker使用命令验证是否生效:
docker info | grep "Docker Root Dir"如果输出显示为新的路径(如
Docker Root Dir: /home/docker-data),则说明迁移成功。可以运行一个测试容器(如docker run --rm hello-world)进一步确认功能正常。 -
清理旧数据(可选)
在确认一切工作正常后,你可以选择删除旧的 Docker 数据以释放系统盘空间。
sudo rm -rf /var/lib/docker警告:此操作不可逆,请务必在验证新位置完全正常工作后进行。
⚠️ 关键注意事项
-
数据一致性:务必在 Docker 服务完全停止的状态下进行数据迁移,否则极易导致数据损坏。
-
磁盘空间:确保新目录所在的磁盘分区有足够的剩余空间容纳现有数据并满足未来增长需求。
-
配置合并:如果
/etc/docker/daemon.json文件已存在其他配置(如镜像加速器),只需添加或修改data-root字段,注意保持正确的 JSON 格式,避免配置冲突。 -
回滚方案:如果在迁移后 Docker 无法启动,首先检查日志定位问题(如
sudo journalctl -u docker.service)。若无法快速解决,可注释或删除daemon.json中的data-root配置,并将备份的数据移回/var/lib/docker,然后重启 Docker 服务,即可恢复至迁移前的状态。
希望这份详细的指南能帮助你顺利完成 Docker 数据存储位置的迁移!如果你在操作过程中遇到具体问题,欢迎随时提出。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐




所有评论(0)