最常用、最稳妥的备份方式是先用docker commit创建容器快照,再用docker save导出为tar文件;它保留完整文件系统状态(含软件、配置及运行时数据),但不包含volume或bind mount数据,恢复时需单独处理持久化存储。

直接用 docker commit 创建容器快照,再用 docker save 导出为 tar 文件,是最常用、最稳妥的备份方式。它保留了容器当时的完整文件系统状态,包括已安装软件、配置修改和运行时数据(非 volume 数据),适合快速恢复或迁移。
创建容器快照(commit)
对正在运行或已停止的容器生成一个镜像快照:
- 先确认目标容器 ID 或名称:
docker ps -a - 执行 commit 命令,加
-p参数可暂停容器几秒以减少写入冲突:docker commit -p 容器ID 或名称 备份镜像名:标签 - 例如:
docker commit -p 34506f9774d8 nginx-backup:v1 - 完成后用
docker images查看新镜像是否生成
导出快照为本地文件(save)
把刚生成的镜像保存成可传输、可归档的 tar 包:
- 命令格式:
docker save -o /路径/备份名.tar 镜像名:标签 - 例如:
docker save -o /backup/nginx-backup-v1.tar nginx-backup:v1 - 确保目标目录存在且当前用户有写权限;路径含空格或中文建议用引号包裹
- 导出后可删除临时镜像释放空间:
docker rmi nginx-backup:v1
恢复快照并启动容器(load + run)
从 tar 文件还原镜像,并基于它启动新容器:
- 加载镜像:
docker load -i /backup/nginx-backup-v1.tar - 验证镜像是否存在:
docker images | grep nginx-backup - 启动容器,注意复用原端口、卷挂载、环境变量等关键参数:
docker run -d --name nginx-restored -p 80:80 -v /data/nginx:/usr/share/nginx/html nginx-backup:v1 - 若原容器使用了数据卷,需单独挂载相同 volume,快照本身不包含 volume 内容
补充说明:什么情况下不适合用 commit?
commit 备份的是容器层,不包含外部 volume 或 bind mount 的数据。如果容器依赖数据库或持久化存储:
- 数据库类容器(如 MySQL、PostgreSQL)应优先用
mysqldump或pg_dump备份数据,再结合docker cp拷出配置文件 - 挂载的数据卷要单独备份:
docker run --rm -v myvol:/volume -v $(pwd):/backup alpine tar czf /backup/vol-backup.tar.gz -C /volume . - 绑定挂载(bind mount)直接备份宿主机对应目录即可,无需操作容器


















