🎯 项目简介
还在为Docker容器迁移而头疼吗?手动导出镜像、备份数据卷、记录配置参数...太繁琐了!
搓了一个一键式Docker容器备份恢复工具,能够完整备份容器的:
- ✅ 容器配置(端口映射、环境变量、启动命令等)
- ✅ 数据卷内容
- ✅ 本地挂载目录
- ✅ 容器镜像
- ✅ 运行日志
最重要的是:备份后可以在任何服务器上完全自动化恢复,无需手动配置!
🚀 快速上手(30秒)
一键安装
curl -fsSL https://raw.githubusercontent.com/shuguangnet/docker_backup_script/main/install.sh | sudo bash
立即使用
# 备份所有运行中的容器 docker-backup -a # 备份所有运行中的容器(排除镜像) PS:排除镜像也可以在backup.conf进行配置 docker-backup --exclude-images -a # 备份指定容器 docker-backup -c container_name # 进入备份目录,一键恢复 安装脚本切换到目录,运行恢复脚本即可恢复 cd /path/to/backup ./restore.sh
🖥️ 交互式菜单
安装完成后,你可以使用交互式菜单进行所有操作:
# 启动交互式菜单
docker-backup-menu
📦 项目地址
🔗 GitHub: https://github.com/shuguangnet/docker_backup_script
⭐ 觉得有用的话给个Star支持一下~
💡 使用场景
🔄 服务器迁移
- 老服务器要下线?一键备份,新服务器一键恢复
- 换云服务商?带着整个Docker环境走
🛡️ 数据保护
- 定期自动备份重要容器
- 升级前备份,出问题秒恢复
🚀 环境复制
- 开发环境快速复制到测试环境
- 生产环境配置快速部署到新节点
📚 学习研究
- 备份别人分享的容器环境
- 快速恢复实验环境
📖 详细使用教程
🛠️ 安装方式
方式一:一键安装(推荐)
curl -fsSL https://raw.githubusercontent.com/shuguangnet/docker_backup_script/main/install.sh | sudo bash
方式二:手动安装
git clone https://github.com/shuguangnet/docker_backup_script.git
cd docker_backup_script
sudo ./install.sh
🎮 基本命令
安装完成后,你将拥有以下命令:
# 备份相关
docker-backup -a # 备份所有运行容器
docker-backup -c nginx # 备份指定容器
docker-backup -c "web db redis" # 备份多个容器
docker-backup -l # 列出可备份的容器
# 恢复相关
docker-restore # 交互式恢复向导
# 或直接在备份目录执行 ./restore.sh
# 实用工具
docker-backup -h # 查看帮助
docker-cleanup # 清理旧备份文件
📂 备份内容详解
每个容器备份包含完整信息:
container_backup_20240126_123456/
├── config/ # 容器配置
│ ├── container_inspect.json # 完整容器信息
│ ├── dockerfile # 重建用Dockerfile
│ └── docker_run_command.sh # 原始运行命令
├── volumes/ # 数据卷备份
│ ├── volume1.tar.gz
│ └── volume2.tar.gz
├── mounts/ # 挂载目录备份
│ ├── mount_1/
│ └── mount_2/
├── logs/ # 容器日志
│ └── container.log
├── container_image.tar.gz # 容器镜像
├── restore.sh # 一键恢复脚本
└── backup_summary.txt # 备份摘要信息
🔧 高级配置
编辑配置文件 /etc/docker-backup/backup.conf
:
# 备份存储位置
BACKUP_DIR="/opt/docker-backups"
# 日志级别 (DEBUG, INFO, WARNING, ERROR)
LOG_LEVEL="INFO"
# 是否备份容器镜像 (true/false)
BACKUP_IMAGES=true
# 备份保留天数
RETENTION_DAYS=30
# 并发备份数量
MAX_PARALLEL=3
📋 实际使用示例
示例1:网站环境迁移
# 旧服务器 - 备份Web环境
docker-backup -c "nginx mysql redis wordpress"
# 打包传输
tar -czf web_backup.tar.gz /tmp/docker-backups/
# 新服务器 - 解压恢复
tar -xzf web_backup.tar.gz
cd nginx_backup_xxx && ./restore.sh
cd mysql_backup_xxx && ./restore.sh
cd redis_backup_xxx && ./restore.sh
cd wordpress_backup_xxx && ./restore.sh


示例2:定时自动备份
# 添加定时任务
crontab -e
# 每天凌晨2点备份所有容器
0 2 * * * /usr/local/bin/docker-backup -a
# 每周日清理30天前的备份
0 3 * * 0 /usr/local/bin/docker-cleanup
可以设置cron定时备份,然后rsync同步到对应存储空间即可

示例3:容器升级保险
# 升级前备份
docker-backup -c myapp
# 升级操作
docker pull myapp:latest
docker stop myapp
docker rm myapp
docker run -d --name myapp myapp:latest
# 如果有问题,立即恢复
cd /tmp/docker-backups/myapp_xxx
./restore.sh
🔍 故障排除
常见问题
- 权限问题
sudo chmod +x /usr/local/bin/docker-*
- jq工具缺失
# Ubuntu/Debian
sudo apt install jq
# CentOS/RHEL
sudo yum install jq
- Docker权限
sudo usermod -aG docker $USER
# 重新登录生效
查看详细日志
# 调试模式运行
LOG_LEVEL=DEBUG docker-backup -c container_name
# 查看系统日志
journalctl -u docker-backup