在 Debian 上“备份 Docker”通常包含几个层面,下面我按常见场景给你一份实用指南,你可以按需选择。
Docker 容器本身是无状态的,真正要备份的是数据卷(volumes)和绑定挂载目录。
docker inspect 容器名 | grep -A 10 Mounts
假设 volume 名为 mysql_data:
docker run --rm \
-v mysql_data:/volume \
-v $(pwd):/backup \
alpine \
tar czf /backup/mysql_data.tar.gz -C /volume .
恢复:
docker run --rm \
-v mysql_data:/volume \
-v $(pwd):/backup \
alpine \
sh -c "cd /volume && tar xzf /backup/mysql_data.tar.gz"
docker inspect 容器名 > container.json
docker commit 容器名 备份镜像名
docker save 备份镜像名 > backup.tar
systemctl stop docker
tar czf docker-backup.tar.gz /var/lib/docker
systemctl start docker
⚠️ 不推荐生产环境频繁这么做,文件很大。
如果你用 docker-compose:
# 备份 compose 文件和数据卷
cp docker-compose.yml ~/backup/
tar czf volumes.tar.gz ./volumes
恢复时:
docker compose up -d
docker exec mysql \
sh -c 'mysqldump -uroot -p密码 数据库名' > db.sql
恢复:
docker exec -i mysql \
sh -c 'mysql -uroot -p密码 数据库名' < db.sql
可用 cron:
0 3 * * * /usr/bin/docker exec mysql mysqldump -uroot -p密码 db > /backup/db_$(date +\%F).sql
✅ 必须备份:数据卷 / 挂载目录
✅ 建议备份:compose 文件
⚠️ 谨慎备份:/var/lib/docker
如果你愿意,可以告诉我:
我可以直接给你定制备份脚本。