要修改 Docker 镜像的存储位置 并迁移数据(如从 /var/lib/docker
迁移到 /mnt/data/docker
),需要以下步骤:
1. 停止 Docker 服务
在修改配置和迁移数据前,先停止 Docker 服务:
bash
sudo systemctl stop docker
2. 修改 Docker 配置文件
编辑 Docker 的配置文件 /etc/docker/daemon.json
,设置新的存储路径:
json
{
"data-root": "/mnt/data/docker"
}
-
说明 :
/mnt/data/docker
是你希望存储 Docker 数据的新路径(需提前创建)。 -
注意 :如果文件不存在,请手动创建:
bashsudo mkdir -p /mnt/data/docker
3. 迁移数据(使用 rsync
或 cp
)
方法 1:使用 rsync
(推荐)
bash
sudo rsync -aP /var/lib/docker/ /mnt/data/docker/
- 参数说明 :
-a
:归档模式(保留权限、符号链接等)。-P
:显示进度和断点续传支持。/var/lib/docker/
:源目录(原始 Docker 数据)。/mnt/data/docker/
:目标目录(新存储路径)。
方法 2:使用 cp
bash
sudo cp -r /var/lib/docker/* /mnt/data/docker/
- 注意 :
cp
可能不会保留所有文件属性(如权限、符号链接),建议优先使用rsync
。
4. 验证数据迁移
检查目标目录是否有完整数据:
bash
ls -l /mnt/data/docker/
- 应该看到
image/
、overlay2/
等 Docker 子目录。
5. 重启 Docker 服务
应用配置并启动 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl start docker
6. 验证修改是否生效
检查 Docker 的根目录是否已更改:
bash
docker info | grep "Docker Root Dir"
- 输出应显示新路径(例如
/mnt/data/docker
)。
7. 测试 Docker 功能
运行一个简单容器验证功能是否正常:
bash
docker run hello-world
8. 清理旧数据(可选)
如果确认迁移成功且不再需要旧数据,可以删除原始目录:
bash
sudo rm -rf /var/lib/docker/
注意事项
-
权限问题:
-
确保新路径的权限允许 Docker 服务读写(通常为
root
用户):bashsudo chown -R root:root /mnt/data/docker sudo chmod -R 755 /mnt/data/docker
-
-
备份数据:
- 操作前备份原始数据(
/var/lib/docker
)以防意外。
- 操作前备份原始数据(
-
挂载点问题:
- 如果
/mnt/data
是挂载的分区,确保其在/etc/fstab
中配置为开机自动挂载,避免重启后路径失效。
- 如果
-
存储驱动兼容性:
- 确保新路径所在的文件系统支持 Docker 的存储驱动(如
overlay2
)。
- 确保新路径所在的文件系统支持 Docker 的存储驱动(如
示例场景
场景 1:将 Docker 数据迁移到 SSD
-
创建新目录并挂载 SSD:
bashsudo mkdir -p /mnt/ssd/docker sudo mount /dev/sdb1 /mnt/ssd
-
修改
daemon.json
:json{ "data-root": "/mnt/ssd/docker" }
-
迁移数据并重启 Docker:
bashsudo rsync -aP /var/lib/docker/ /mnt/ssd/docker/ sudo systemctl restart docker
场景 2:解决磁盘空间不足问题
-
将 Docker 根目录迁移到更大分区(如
/data/docker
)。 -
修改
daemon.json
并迁移数据:bashsudo rsync -aP /var/lib/docker/ /data/docker/ sudo systemctl restart docker
通过以上步骤,你可以安全地修改 Docker 镜像的存储位置并迁移数据。如果遇到问题,请检查权限、配置文件格式或挂载点设置。