将 Docker 数据目录迁移到新位置(如 /data2)可以释放系统盘空间或优化存储结构。以下是安全、完整的迁移步骤。
📋 迁移前准备
# 1. 查看当前 Docker 根目录
docker info | grep "Docker Root Dir"
# 2. 查看磁盘空间
df -h
# 3. 查看容器和镜像占用
docker system df
🛑 步骤 1:停止 Docker 服务
# 停止所有容器
docker stop $(docker ps -aq)
# 停止 Docker 服务
systemctl stop docker
# 或
service docker stop
📦 步骤 2:备份现有数据(可选但推荐)
# 创建备份
tar -czvf /root/docker-backup-$(date +%F).tar.gz /var/lib/docker
# 或完整备份整个目录
cp -r /var/lib/docker /root/docker-backup-$(date +%F)
🚚 步骤 3:迁移数据到新位置
注意用rsync -avz 保留权限,不然后期因为权限带来非常多问题。
# 假设新目录为 /data2/docker
mkdir -p /data2/docker
# 复制数据(保留权限和属性)
rsync -avz /var/lib/docker/ /data2/docker/
# 或使用 cp
# cp -a /var/lib/docker/* /data2/docker/
⚙️ 步骤 4:修改 Docker 配置
方法一:修改 daemon.json(推荐)
# 编辑配置文件
vim /etc/docker/daemon.json
# 添加或修改以下内容
{
"data-root": "/data2/docker"
}
如果文件不存在,创建它。确保 JSON 格式正确。
注意:
1、docker版本不一样,参数不一样
2、不需要修改 storage-driver 的配置值,但需要保留该配置。
简单来说:
storage-driver 是 Docker 存储数据的方式(引擎)。
data-root 是 Docker 存储数据的位置(路径)。
方法二:修改 systemd 服务文件
# 编辑服务文件
vim /etc/systemd/system/docker.service.d/override.conf
# 添加以下内容
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --data-root=/data2/docker
🧹 步骤 5:清理并重启
# 可选:备份原目录(确认迁移成功后再删除)
mv /var/lib/docker /var/lib/docker.backup
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 Docker
systemctl start docker
# 设置开机自启
systemctl enable docker
✅ 步骤 6:验证迁移
# 检查 Docker 根目录是否变更
docker info | grep "Docker Root Dir"
# 检查容器状态
docker ps -a
# 检查镜像
docker images
# 测试运行容器
docker run --rm hello-world
# 检查新目录占用
du -sh /data2/docker
🧩 可选:迁移特定子目录
如果只想迁移部分数据(如容器、镜像):
# 只迁移容器数据
rsync -avz /var/lib/docker/containers/ /data2/docker/containers/
# 只迁移镜像数据
rsync -avz /var/lib/docker/image/ /data2/docker/image/
⚠️ 常见问题处理
1. 权限问题
# 确保目录权限正确
chown -R root:root /data2/docker
chmod -R 711 /data2/docker
2. SELinux 问题(CentOS/RHEL)
# 设置正确的上下文
chcon -R -t var_lib_t /data2/docker
# 或临时禁用
setenforce 0

1653

被折叠的 条评论
为什么被折叠?



