Docker存储目录迁移指南
Docker存储目录迁移指南
概述
当Docker的默认存储目录(通常是/var/lib/docker)占满磁盘空间时,可以通过修改配置将其迁移到另一个有更大空间的目录。本文档提供了详细的操作步骤和注意事项。
核心原理
停止Docker服务 → 将旧数据完整复制到新位置 → 修改Docker配置文件指向新路径 → 重启服务
迁移前准备
1. 权限要求
●
需要root权限或sudo权限
●
确保目标磁盘有足够的空间容纳所有Docker数据
2. 停止Docker服务
代码
sudo systemctl stop docker
sudo systemctl stop docker.socket
重要提示: 必须确保在数据迁移过程中没有任何容器在运行,以防止数据损坏或不一致。
详细操作步骤
步骤1:创建新的存储目录
选择一个空间充足的路径作为新的Docker数据存储根目录:
代码
sudo mkdir -p /data/docker-data
步骤2:复制原有数据
使用rsync命令将旧目录下的所有数据安全地复制到新目录:
代码
sudo rsync -aAXHv --progress /var/lib/docker/ /data/docker-data/
参数说明:
●
-a: 归档模式,保留权限、符号链接等
●
-A: 保留ACL属性
●
-X: 保留扩展属性
●
-H: 保留硬链接
●
-v: 显示详细过程
●
--progress: 显示复制进度
步骤3:修改Docker配置文件
编辑Docker的守护进程配置文件:
代码
sudo nano /etc/docker/daemon.json
添加或修改data-root字段:
代码
{ "data-root": "/data/docker-data"}
注意: 如果文件中已有其他配置项,请确保用逗号正确分隔,保持JSON格式的有效性。
步骤4:重启Docker服务
代码
sudo systemctl daemon-reload
sudo systemctl start docker
验证迁移结果
1. 检查Docker根目录
代码
sudo docker info | grep "Docker Root Dir"
预期输出:
代码
Docker Root Dir: /data/docker-data
2. 检查镜像和容器
代码
sudo docker images
sudo docker ps -a
确认列表中的内容与迁移前一致。
清理旧数据
在确认Docker在新目录下运行完全正常后,可以删除旧的/var/lib/docker目录:
代码
# 先重命名为备份sudo mv /var/lib/docker /var/lib/docker.bak
# 观察几天,确认一切无误后删除备份sudo rm -rf /var/lib/docker.bak
重要注意事项
必须停止服务
迁移前必须停止Docker服务,否则会导致数据不一致或损坏。
使用rsync
避免使用cp -r,因为它可能无法正确处理硬链接等特殊文件,导致镜像层校验失败。
SELinux/AppArmor
如果系统启用了SELinux,可能需要为新目录设置正确的安全上下文:
代码
sudo restorecon -R /data/docker-data
权限问题
确保Docker用户(通常是root)对新目录有完全的读写权限。
Docker Desktop
此方法适用于Linux服务器上的Docker Engine。Docker Desktop (Windows/macOS)需要在图形界面中进行设置。
常见问题解答
Q1: 迁移过程中可以访问Docker吗?
A1: 不可以。迁移期间Docker服务必须完全停止。
Q2: 迁移需要多长时间?
A2: 取决于原有Docker数据的大小和磁盘IO性能,建议在业务低峰期进行操作。
Q3: 迁移后容器ID会改变吗?
A3: 不会。容器的ID和配置信息都会完整保留。
总结
通过本文档介绍的方法,您可以安全地将Docker存储目录迁移到新的位置,解决磁盘空间不足的问题。请严格按照操作步骤执行,并在生产环境操作前在测试环境进行验证。
浙公网安备 33010602011771号