Ubuntu Docker容器备份与恢复指南
docker stop <container_name_or_id>
docker ps -a
确认状态)。docker inspect <container_name_or_id> | grep Mounts -A 10
Source
字段)和容器内路径(Destination
字段)。使用docker export
命令将容器的完整文件系统导出为tar归档文件,包含容器内的所有文件、目录及配置(但不包含镜像的历史层)。
命令示例:
docker export <container_name_or_id> > container_backup.tar
使用docker commit
命令将容器的当前状态保存为一个新的镜像,包含镜像的所有层、环境变量、端口映射等元数据。
命令示例:
docker commit <container_name_or_id> backup_image:latest
docker save
命令:docker save -o backup_image.tar backup_image:latest
数据卷是Docker中持久化存储的核心,备份卷数据是确保关键数据不丢失的关键步骤。
命令示例(使用tar
打包卷内容):
# 创建备份目录 mkdir -p /backup/container_name # 打包卷数据(将容器内卷路径打包到宿主机备份目录) docker run --rm -v <volume_name>:/volume -v /backup/container_name:/backup busybox tar cvf /backup/volume_backup.tar /volume
<volume_name>
:卷名称(可通过docker volume ls
查看);/volume
:容器内卷的挂载路径(需与docker inspect
中的Destination
一致);/backup/container_name
:宿主机上的备份目录。若使用docker export
备份,可通过docker import
将tar文件导入为新镜像,再创建容器。
命令示例:
# 导入tar文件为新镜像 cat container_backup.tar | docker import - restored_image:latest # 基于新镜像创建容器 docker run -d --name restored_container -p 8080:80 restored_image:latest
-p 8080:80
:将宿主机8080端口映射到容器80端口(根据原容器配置调整);--name restored_container
:新容器名称(需唯一)。若使用docker commit
或docker save
备份,可通过docker load
加载镜像,再创建容器。
命令示例:
# 加载镜像tar文件 docker load -i backup_image.tar # 基于镜像创建容器 docker run -d --name restored_container -p 8080:80 backup_image:latest
docker load
会保留镜像的所有元数据(如环境变量、端口映射),无需手动指定。若备份了数据卷,需将备份数据解压到新卷,再挂载到恢复的容器中。
命令示例(解压卷数据):
# 创建新卷 docker volume create restored_volume # 解压备份数据到新卷 docker run --rm -v restored_volume:/volume -v /backup/container_name:/backup busybox tar xvf /backup/volume_backup.tar -C /volume
docker run -d --name restored_container -v restored_volume:/data -p 8080:80 restored_image:latest
-v restored_volume:/data
:将新卷挂载到容器内/data
路径,需与原容器卷路径一致)docker exec
执行FLUSH TABLES WITH READ LOCK
(MySQL)或fsync
(MongoDB)后再备份。cron
定时任务、Portainer图形化管理工具)实现备份自动化,减少人为操作失误。通过以上步骤,可实现Ubuntu环境下Docker容器的高效备份与恢复,确保数据安全与业务连续性。