You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker数据迁移的官方标准方法探究

如何安全迁移Docker的/var/lib/docker数据目录(官方推荐方法)

太懂这种找不到官方标准方法的抓狂了!Docker明明应用得这么广泛,但迁移/var/lib/docker数据目录的官方步骤确实藏得有点深,之前用mv加软链接的方法现在确实不被官方推荐了。我整理了几种被广泛认可、接近官方标准的方法,亲测靠谱:

方法一:修改Docker配置文件(官方首推)

这是Docker官方现在最推荐的方式,直接通过配置指定新的数据根目录,步骤清晰且稳定:

  • 第一步:先彻底停止Docker相关服务,避免数据损坏
    sudo systemctl stop docker
    sudo systemctl stop docker.socket containerd
    
  • 第二步:把现有Docker数据复制到新路径(比如我这里用/data/docker作为新目录,你可以换成自己的路径)
    用rsync比直接mv更安全,能保留文件权限,还能在中途中断后续传:
    sudo rsync -avx /var/lib/docker/ /data/docker/
    
  • 第三步:备份并修改Docker配置文件
    先备份原配置(如果daemon.json不存在就跳过备份):
    sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
    
    编辑daemon.json(不存在就新建),添加data-root字段指定新路径:
    {
      "data-root": "/data/docker"
    }
    

    注意:旧版本Docker(17.06之前)用的是graph字段,新版本统一用data-root

  • 第四步:启动Docker服务并验证
    sudo systemctl start docker
    
    运行docker info,查看输出里的Docker Root Dir是否是新路径;再跑个测试容器确认正常:
    docker run hello-world
    
  • 第五步:确认没问题后,删除旧的Docker数据目录(可选)
    sudo rm -rf /var/lib/docker
    

方法二:使用systemd挂载点(适合动态调整场景)

如果你的场景需要灵活切换数据目录,或者不想修改Docker核心配置,用systemd的绑定挂载也是官方认可的方案:

  • 第一步:同样先停止Docker相关服务
    sudo systemctl stop docker docker.socket containerd
    
  • 第二步:复制数据到新路径
    sudo rsync -avx /var/lib/docker/ /data/docker/
    
  • 第三步:重命名旧目录(避免冲突)
    sudo mv /var/lib/docker /var/lib/docker.old
    
  • 第四步:创建systemd挂载单元文件
    新建/etc/systemd/system/var-lib-docker.mount,内容如下:
    [Unit]
    Description=Mount Docker Data Directory
    Before=docker.service
    
    [Mount]
    What=/data/docker
    Where=/var/lib/docker
    Type=none
    BindOptions=bind,rw
    
    [Install]
    WantedBy=multi-user.target
    
  • 第五步:重载systemd配置并启用挂载
    sudo systemctl daemon-reload
    sudo systemctl enable --now var-lib-docker.mount
    
  • 第六步:启动Docker服务并验证
    sudo systemctl start docker
    
    同样用docker info和测试容器确认正常后,就可以删除旧目录了:
    sudo rm -rf /var/lib/docker.old
    

关键注意事项

  • 务必先停止Docker服务:在操作数据目录前,一定要确保所有Docker相关进程都停掉,否则会导致数据损坏
  • 优先用rsync复制数据:不要直接用mv,万一操作失误或者中途中断,rsync可以快速恢复
  • 操作前备份数据:可以用tar打包旧目录做备份,避免意外:
    sudo tar czf docker-backup-$(date +%Y%m%d).tar.gz /var/lib/docker
    
  • 新路径的权限要正确:确保新目录的所有者是root,权限为700,否则Docker可能无法读写数据

内容的提问来源于stack exchange,提问作者Collin Chaffin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:44:42