Docker Overlay2 迁移至 CentOS Home 完整指南

你要将Docker的overlay2存储驱动目录(/var/lib/docker/overlay2,属于overlay文件系统)转移到centos-home逻辑卷(/home目录)下,核心是迁移整个Docker数据目录(因为overlay2是Docker数据目录的子目录,无法单独迁移),从而彻底释放根分区空间,以下是CentOS 7下的精准操作步骤:

核心逻辑

Docker的overlay/overlay2存储目录依赖于Docker的根数据目录(默认/var/lib/docker),因此只需将Docker的核心存储路径从根分区迁移到/home(centos-home),overlay2目录会随之一并转移,无需单独处理。

前置准备

  1. 确认/home(centos-home)空闲空间充足(执行df -h /home);

  2. root用户操作(或全程加sudo);

  3. 停止所有Docker容器和服务,避免数据损坏:

    bash 复制代码
    # 停止所有运行中的容器
    docker stop $(docker ps -aq)
    # 停止Docker服务及socket(关键:避免overlay目录被占用)
    systemctl stop docker
    systemctl stop docker.socket
    # 验证Docker已停止:无输出则成功
    ps -ef | grep docker | grep -v grep

完整迁移步骤

步骤1:在/home创建Docker新存储目录
bash 复制代码
# 创建层级目录(建议命名为/home/docker,便于识别)
mkdir -p /home/docker/lib
# 设置目录权限(与原/var/lib/docker一致,适配overlay驱动要求)
chmod 711 /home/docker/lib
chown root:root /home/docker/lib
# 可选:关闭SELinux临时放行(CentOS 7默认开启,避免overlay权限拦截)
setenforce 0
步骤2:迁移原有Docker数据(含overlay2)到新目录

使用rsync迁移(保留文件权限、软链接,适配overlay的分层存储特性,比cp更安全):

bash 复制代码
# 迁移/var/lib/docker下所有内容(含overlay2)到/home/docker/lib
rsync -avz --numeric-ids /var/lib/docker/ /home/docker/lib/
  • --numeric-ids:保留用户/组的数字ID,避免overlay目录权限错乱;

  • 迁移完成后,可执行ls /home/docker/lib/overlay2验证:能看到原有overlay分层目录即成功。

步骤3:修改Docker配置,指定新存储路径

Docker的存储路径通过/etc/docker/daemon.json配置,无则创建:

bash 复制代码
# 编辑/创建配置文件
vim /etc/docker/daemon.json

写入以下内容(核心是data-root指定新路径,适配Docker 17.06+版本,覆盖默认的/var/lib/docker):

bash 复制代码
{
  "data-root": "/home/docker/lib",
  "storage-driver": "overlay2"  # 显式指定overlay2驱动,避免自动切换
}
  • 若原有daemon.json有其他配置(如镜像加速),只需新增data-root字段,保持JSON格式正确(逗号分隔,无多余逗号);

  • 保存退出:Esc → 输入:wq

步骤4:备份原Docker目录(避免冲突)
bash 复制代码
# 重命名原目录(不直接删除,验证无误后清理)
mv /var/lib/docker /var/lib/docker.bak
步骤5:重启Docker并验证overlay路径
bash 复制代码
# 重载系统配置,重启Docker
systemctl daemon-reload
systemctl start docker

# 验证1:Docker服务正常运行
systemctl status docker  # 输出"active (running)"即正常

# 验证2:overlay2目录已迁移到/home(关键!)
docker info | grep -E "Docker Root Dir|Storage Driver"

预期输出

bash 复制代码
Storage Driver: overlay2
Docker Root Dir: /home/docker/lib
步骤6:验证容器/overlay功能正常
bash 复制代码
# 启动测试容器,验证overlay存储正常
docker run --rm hello-world

# 查看新overlay2目录是否生成新文件(确认写入正常)
ls -lh /home/docker/lib/overlay2/ | tail -5
  • 若测试容器运行成功,且overlay2目录有新文件生成,说明迁移生效。
步骤7:清理原目录(释放根分区空间)

验证无误后,删除原备份目录:

bash 复制代码
rm -rf /var/lib/docker.bak

关键注意事项(针对overlay驱动)

  1. overlay2权限要求 :新目录必须是root:root、权限711,否则Docker启动时会提示"overlay mount failed";

  2. SELinux永久适配(可选):

  1. 临时关闭setenforce 0重启后失效,若需永久放行,执行:

    bash 复制代码
    # 编辑SELinux配置
    vim /etc/selinux/config
    # 修改为:SELINUX=permissive
    # 保存后重启生效(reboot)
  1. overlay分层数据完整性 :迁移时必须用rsync -avz --numeric-ids,避免overlay的分层文件(如difflowerdir)损坏;

  2. Docker版本兼容:CentOS 7建议使用Docker 19.03+,避免旧版本对overlay2的兼容性问题。

  3. SELinux 影响:如果系统开启了 SELinux,可能需要调整上下文(可选):

bash 复制代码
sudo chcon -Rt svirt_sandbox_file_t /home/docker

常见问题与解决方案

|----------------------------------------|--------------------|-------------------------------------------------------------------------------------------------------|
| 问题现象 | 原因 | 解决方法 |
| Docker启动报错"overlay2: invalid argument" | SELinux拦截overlay挂载 | 执行setenforce 0临时关闭,或永久设置SELINUX=permissive |
| 容器启动提示"no space left on device" | 新目录权限错误,Docker无法写入 | 执行chmod 711 /home/docker/lib && chown root:root /home/docker/lib |
| Docker Root Dir仍显示/var/lib/docker | daemon.json格式错误 | 执行cat /etc/docker/daemon.json检查(无多余逗号/引号),重新执行systemctl daemon-reload && systemctl restart docker |

总结

  1. overlay2作为Docker的存储驱动目录,无法单独迁移 ,需迁移整个Docker数据目录到/home(centos-home);

  2. 核心操作:停止Docker → rsync迁移数据 → 修改daemon.json指定新路径 → 验证overlay路径

  3. 验证关键:docker info确认存储驱动为overlay2且根目录指向/home,测试容器能正常运行。

迁移完成后,原根分区的overlay目录(/var/lib/docker/overlay2)已被转移,根分区空间会大幅释放,且后续Docker的所有overlay分层数据都会存储在centos-home下。

相关推荐
Mr. Cao code2 小时前
Docker文件数据卷实战:挂载与优化
运维·docker·容器
大佐不会说日语~3 小时前
Docker部署旧版本系统MySQL5.7+乱码问题解决方案
运维·docker·容器
java_logo3 小时前
PyTorch Docker 容器化部署与生产运行实践
人工智能·pytorch·docker·pytorch部署·pytorch部署文档·pytorch部署教程·pytorch上部署方案
Lam㊣3 小时前
CentOS上搭建时间同步服务器
linux·服务器·centos
ZhangBlossom4 小时前
Freqtrade 新人上手教程(macOS + Docker,无需 docker-compose)
macos·docker·容器
海鸥814 小时前
Docker 常用命令 大全
docker·容器
爱丶狸4 小时前
Docker帮助中的英译汉
docker
C_心欲无痕13 小时前
Dockerfile:构建 Docker 镜像
运维·docker·容器
C_心欲无痕15 小时前
Docker 本地部署 CSR 前端项目完整指南
前端·docker·容器