运维指南

docker-data-move.sh 在真实运维里最适合的使用场景

一篇面向运维现场的说明,讲清楚当 Docker 存储把系统盘吃满、手工迁移又有风险时,什么时候该用 docker-data-move.sh,以及脚本实际在做什么。

阅读约 7 分钟 · 2026-03-13

它解决的核心运维问题

当 Docker 数据目录不断膨胀,最终把系统盘压到接近告警线时,docker-data-move.sh 就很有价值。它特别适合那种“业务已经在跑、磁盘也快满了、但又不想手工乱搬目录”的场景。

和在压力下手改 daemon.json、手工 rsync、自己停服务相比,这个脚本把迁移拆成了更清晰的步骤:先检测、再选盘、再停服务、再同步数据、最后更新配置并校验结果。

最适合落地的环境

它最适合那种“最初默认装在系统盘里,后来业务长起来才发现该搬家”的长期运行主机。像这次 CentOS 7 主机,Docker Root Dir 在 `/home/docker-data`,而 `/home` 只剩几百 MiB,这就是很典型的使用场景。

  • 单机服务场景里,Docker 数据已经明显超出原始磁盘容量
  • 需要把迁移流程文档化,便于团队交接和复盘
  • 想避免“临时 rsync + 手改配置”这种高风险操作
  • 像 Harbor、Registry、私有平台这类长期累积镜像和 volume 的节点

如何理解 CentOS 7 上这段输出

从这次 CentOS 7 的输出可以直接读出几件事:当前 Docker Root Dir 在 `/home/docker-data`,`/home` 盘几乎满了,而脚本自动选择了空间更大的 `/data/docker-data` 作为迁移目标。

当日志进入 `Syncing Docker data to /data/docker-data ...` 时,说明前面的检测、选盘和停服务都已经完成,当前正在用 `rsync` 复制镜像层、容器层、volume 以及相关元数据。

CentOS 7 上执行 docker-data-move.sh 时的终端输出截图
一次真实迁移执行截图,脚本已经自动选择 `/data/docker-data` 作为目标路径。
  • 当前 Docker 已用空间:53.85 GiB
  • 建议目标盘至少可用:61.93 GiB
  • 自动选中的目标目录:`/data/docker-data`
  • `docker.socket` 的 warning 更像提示,不代表迁移失败

预计还要多久

像 `98%` 到 `99%`、`8MB/s` 到 `9MB/s` 这样的进度,通常说明已经进入收尾阶段了。对这台大约 `53.85 GiB` 的主机来说,正常情况下往往只剩几分钟,但如果尾部还有很多小文件、目录项或 metadata 要刷盘,也可能比百分比看起来更久。

比较稳妥的教程写法可以是:当输出已经到 `98%` 到 `99%` 时,通常代表大头数据已经完成,剩余时间大致在几分钟到十几分钟之间,具体取决于磁盘性能、文件碎片和 volume 文件数量。

适合写进教程的操作步骤

如果你要把它整理成给运维同学看的教程,建议按“迁移前检查、执行命令、观察日志、迁移后验证”这四段来写,最容易理解,也方便现场照着执行。

  • 先执行 `df -PT` 和 `docker info | grep "Docker Root Dir"`,确认当前磁盘和数据目录位置
  • 执行 `curl -fsSL https://helper.sh/docker-data-move.sh | sudo bash -s -- --auto --yes`
  • 在 `Syncing Docker data ...` 阶段耐心等待,不要手工重启 Docker
  • 脚本完成后再次执行 `docker info | grep "Docker Root Dir"`,确认已经切到新目录
  • 确认业务容器和镜像仓库恢复正常,再考虑清理旧备份目录