迁移docker数据目录,释放硬盘数据过程
作者:dayfoxman
这篇文章主要介绍了迁移docker数据目录,释放硬盘数据过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
将 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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
