You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在不包含镜像的情况下备份/var/lib/docker目录?

如何备份Docker容器和卷并排除镜像文件

这个需求很合理——镜像确实没必要占用备份空间,毕竟大多能从公开源重新拉取,咱们重点保住容器配置、卷数据这些没法轻易恢复的内容就行。下面是两种常用的简便方法:

方法一:用rsync增量备份(推荐)

rsync适合做增量备份,而且能精准排除指定目录,命令如下:

sudo rsync -av --exclude='image' --exclude='distribution' --exclude='buildkit' /var/lib/docker/ /path/to/your/backup/location/docker/

各参数说明:

  • -a:归档模式,保留文件权限、时间戳、软链接等所有属性,保证备份的完整性
  • -v:显示备份进度,方便你跟踪状态
  • --exclude='image':核心排除项,这个目录存储了所有镜像的元数据,删掉它Docker就认不到本地镜像了
  • --exclude='distribution':排除镜像分发缓存(比如拉镜像时的临时文件、索引缓存)
  • --exclude='buildkit':如果用BuildKit构建过镜像,这个目录是构建缓存,也可以放心排除

方法二:用tar打包备份

如果需要把备份打包成压缩文件(方便传输或长期存储),可以用tar命令:

sudo tar -czf docker_backup.tar.gz --exclude='image' --exclude='distribution' --exclude='buildkit' /var/lib/docker/

各参数说明:

  • -c:创建新的归档文件
  • -z:用gzip压缩,减少备份文件体积
  • -f:指定备份文件的名称
  • 排除项和rsync的一致,都是镜像相关的冗余目录

重要注意事项

  • 备份前建议停止Docker服务:虽然rsync和tar支持在线备份,但停止Docker能彻底避免数据不一致(比如容器正在写入日志或卷数据时)。停止命令:sudo systemctl stop docker,备份完成后再启动:sudo systemctl start docker
  • 确认你的存储驱动:如果你的Docker用的不是默认的overlay2(比如devicemapper、aufs),image目录依然是通用的镜像元数据目录,无需额外调整;如果不确定,可通过docker info | grep "Storage Driver"查看
  • 验证备份完整性:备份完成后,记得检查目标目录/压缩包,确保containersvolumesnetworks这些关键目录都被保留,而image等排除项不在其中
  • 恢复步骤:恢复时先停止Docker,将备份内容复制回/var/lib/docker/,启动Docker后重新拉取所需镜像,容器就能基于恢复的配置和卷数据正常启动了

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

火山引擎 最新活动