1. 准备工作:停止 Docker 服务
首先必须完全停止 Docker,防止在迁移过程中有数据写入导致损坏。
注意:要同时停止 socket,以防它自动唤醒 Docker。
sudo systemctl stop docker
sudo systemctl stop docker.socket2. 迁移数据:使用 rsync 同步
我们将原有的数据完整迁移到新磁盘的目标目录(我的在 /home/naseele/data/docker_root_data,因为我给另一个盘挂载到data文件夹了)。
使用 rsync 而不是 cp 或 mv,是为了确保文件权限、软链接等属性完美保留。
# 创建新目录
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/dockerTIPS:
- 为什么不用软链接? 虽然把
/var/lib/docker做个软链指过去也能用,但修改daemon.json是官方推荐的做法,更清晰,不容易因为误删软链导致灾难。 - 关于 rsync: 一定要用
-a参数,否则文件权限丢了,容器启动时会报一堆 Permission denied 错误。

Comments NOTHING