Ubuntu Docker容器备份与恢复指南
docker stop <container_name_or_id>docker ps -a确认状态)。docker inspect <container_name_or_id> | grep Mounts -A 10Source字段)和容器内路径(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容器的高效备份与恢复,确保数据安全与业务连续性。