温馨提示×

centos下docker如何迁移

小樊
41
2025-11-19 19:47:54
栏目: 智能运维

CentOS 下 Docker 迁移指南

一 迁移场景与准备

  • 适用场景:将 Docker 默认数据目录 /var/lib/docker 迁移到更大的磁盘(如 /data、新挂载盘 /mnt/sdb 等),以解决根分区空间不足或性能问题。
  • 准备要点:
    • 确认新目录所在磁盘空间充足、性能满足需求。
    • 迁移前先备份关键镜像与数据卷(如用 docker save 导出镜像,或备份挂载到宿主机的卷目录)。
    • 规划停机窗口,尽量一次性完成迁移与验证,减少对业务影响。

二 标准迁移步骤 data-root 方式(推荐)

  • 步骤概览:
    1. 查看当前 Docker 根目录与磁盘使用
      • 查看根目录:docker info | grep -i “Docker Root Dir”
      • 查看占用:docker system df
    2. 停止 Docker 服务
      • systemctl stop docker
    3. 迁移数据(保持权限与属性)
      • 建议用 rsync 增量复制:rsync -aP /var/lib/docker/ /new-path/docker/(末尾斜杠“/”表示复制目录内容)
    4. 配置新数据目录
      • 编辑或创建 /etc/docker/daemon.json,设置 “data-root”: { “data-root”: “/new-path/docker” }
    5. 启动并验证
      • systemctl daemon-reload && systemctl start docker
      • 验证:docker info | grep -i “Docker Root Dir”,应显示新路径;运行 docker imagesdocker ps -a 检查对象是否完整
    6. 观察与回滚
      • 观察日志与业务运行状态,确认无误后再清理旧数据:rm -rf /var/lib/docker.bak(若此前已备份并重命名)
  • 说明:
    • 使用 data-root 是现代 Docker 推荐做法;旧参数 –graph/-g 已废弃,不建议再使用。

三 备选方案

  • 软链接方式(不改配置)
    • 思路:将新目录软链到 /var/lib/docker,对应用无感知。
    • 简要步骤:
      • 停服务:systemctl stop docker
      • 迁移数据:mv /var/lib/docker /var/lib/docker.bak && rsync -aP /var/lib/docker.bak/ /new-path/docker/
      • 建软链:ln -sfn /new-path/docker /var/lib/docker
      • 启服务:systemctl start docker 并验证
    • 注意:部分容器编排系统(如 Kubernetes)对软链支持不佳,生产环境更推荐 data-root 方式。
  • 修改 systemd service 启动参数(不推荐)
    • 思路:在 /usr/lib/systemd/system/docker.serviceExecStart 中增加 –graph /new-path/docker 并重启。
    • 风险:与 daemon.json 配置可能冲突,维护成本高,且 –graph 已废弃,不建议使用。

四 迁移后验证与清理

  • 验证清单:
    • 根目录变更:docker info | grep -i “Docker Root Dir” 显示新路径
    • 对象完整性:docker imagesdocker ps -a 数量与预期一致
    • 运行验证:启动关键容器,检查日志与挂载卷数据是否可达
    • 资源与性能:观察磁盘使用与 I/O 是否正常
  • 清理与回滚:
    • 确认无误后删除旧数据:rm -rf /var/lib/docker.bak
    • 若出现异常,可快速回滚:停服务、移除软链或恢复 daemon.json、将备份拷回 /var/lib/docker、再启动服务。

五 常见问题与排错

  • 权限与特殊权限丢失
    • 迁移时务必保留权限与扩展属性,建议使用 rsync -aPcp -pR;丢失 /tmp 的粘滞位等可能导致容器(如 MongoDB)启动失败。
  • 配置冲突与旧参数
    • 同时设置 daemon.jsondata-root 与 service 的 –graph 会导致冲突;且 –graph/-g 已废弃,请统一使用 data-root
  • 软链在编排环境不兼容
    • Kubernetes 等场景不建议使用软链,优先选择 data-root 方式。
  • 空间不足导致复制失败
    • 迁移前用 docker system dfdf -h 评估空间,必要时先清理无用数据(如 docker system prune),或扩容新盘后再迁移。

0