服务器空间告急?教你优雅地将 Docker 镜像迁移到大容量磁盘

Naseele 其他 2 次阅读 623 字 预计阅读时间: 3 分钟 发布于 18 小时前 最后更新于 18 小时前


AI 摘要

嘿,服务器空间告急,Docker镜像快把硬盘塞爆了?别慌!这篇教程就像给你的Docker搬个家,从拥挤的小公寓搬到宽敞的大别墅。只需四步:先让Docker睡个觉(停服务),再用“复制粘贴Pro版”(rsync)把家当搬到新磁盘,改个新地址(修改配置),最后叫醒它验证搬家成功。优雅又安全,再也不怕空间不足啦!

1. 准备工作:停止 Docker 服务

首先必须完全停止 Docker,防止在迁移过程中有数据写入导致损坏。

注意:要同时停止 socket,以防它自动唤醒 Docker。

sudo systemctl stop docker
sudo systemctl stop docker.socket

2. 迁移数据:使用 rsync 同步

我们将原有的数据完整迁移到新磁盘的目标目录(我的在 /home/naseele/data/docker_root_data,因为我给另一个盘挂载到data文件夹了)。

使用 rsync 而不是 cpmv,是为了确保文件权限、软链接等属性完美保留。

# 创建新目录
mkdir -p /home/naseele/data/docker_root_data

# 同步数据(-aP 保留权限并显示进度)
sudo rsync -avP /var/lib/docker/ /home/naseele/data/docker_root_data/

3. 修改配置:指定新的 Data Root

这是最关键的一步。我们需要修改 Docker 的守护进程配置文件,告诉它:“以后去新家找数据”。

编辑文件:/etc/docker/daemon.json (如果文件不存在则新建,如果存在要注意保留原有配置,加个逗号隔开)

{
  "data-root": "/home/naseele/data/docker_root_data"
}

4. 重启与验证

配置改好后,重新加载配置并启动服务。

sudo systemctl daemon-reload
sudo systemctl start docker

验证方法:docker info 命令确认了 Docker Root Dir 已经变了:

docker info | grep "Docker Root Dir"
# 预期输出: Docker Root Dir: /home/naseele/data/docker_root_data

确认容器都正常跑起来、且业务没受影响后,我们再删除旧数据。

5. 收尾:清理旧数据

确认一切正常后,释放根目录空间:

注意:强烈建议在使用rm时,用tab键补全,以防误删或者因为通配符匹配错误而误伤系统路径!!!

sudo rm -rf /var/lib/docker

TIPS:

  • 为什么不用软链接? 虽然把 /var/lib/docker 做个软链指过去也能用,但修改 daemon.json 是官方推荐的做法,更清晰,不容易因为误删软链导致灾难。
  • 关于 rsync: 一定要用 -a 参数,否则文件权限丢了,容器启动时会报一堆 Permission denied 错误。
长恨此身非我有,何时忘却营营。
最后更新于 2026-02-12