docker commit
创建镜像备份# 将运行中的容器提交为镜像
docker commit <container_name> backup-image:<tag>
# 保存镜像为tar文件
docker save -o backup.tar backup-image:<tag>
# 导出容器文件系统为tar存档
docker export <container_name> -o container-backup.tar
# 查找数据卷位置
docker inspect -f '{{ .Mounts }}' <container_name>
# 直接备份数据卷目录
tar -czvf volume-backup.tar.gz /var/lib/docker/volumes/<volume_name>
# 加载备份的镜像
docker load -i backup.tar
# 从镜像创建新容器
docker run -d --name restored-container backup-image:<tag>
# 导入容器文件系统
cat container-backup.tar | docker import - restored-image:<tag>
# 运行新容器
docker run -d --name restored-container restored-image:<tag>
# 创建新数据卷
docker volume create restored-volume
# 解压备份到数据卷目录
tar -xzvf volume-backup.tar.gz -C /var/lib/docker/volumes/restored-volume/_data
#!/bin/bash
# 容器备份脚本
BACKUP_DIR=/backups/docker
DATE=$(date +%Y%m%d)
# 备份所有运行中的容器
for container in $(docker ps -q); do
name=$(docker inspect -f '{{.Name}}' $container | sed 's/\///g')
echo "备份容器: $name"
# 提交为镜像
docker commit $container ${name}-backup:$DATE
# 保存为tar文件
docker save -o $BACKUP_DIR/${name}-${DATE}.tar ${name}-backup:$DATE
# 备份数据卷
for volume in $(docker inspect -f '{{range .Mounts}}{{if eq .Type "volume"}}{{.Name}} {{end}}{{end}}' $container); do
echo "备份数据卷: $volume"
docker run --rm -v $volume:/volume -v $BACKUP_DIR:/backup alpine \
tar -czf /backup/${volume}-${DATE}.tar.gz -C /volume .
done
done
通过以上方法,您可以有效地备份和恢复Docker容器及其数据,确保业务连续性和数据安全。