Debian上Docker容器的备份与恢复
一、备份策略与准备
apt-get update && apt-get install -y docker.io rsyncmkdir -p /backup/docker/{images,volumes,compose,configs}二、常用备份方法
docker save -o /backup/docker/images/myimage_$(date +%F).tar myimage:tagdocker load -i /backup/docker/images/myimage_2025-12-09.tardocker cp <容器名或ID>:/var/www/html /backup/docker/containers/<容器名>_html_$(date +%F)docker cp /backup/docker/containers/<容器名>_html_2025-12-09 <容器名或ID>:/var/www/htmldocker run --rm \
-v my_volume:/volume:ro \
-v /backup/docker/volumes:/backup \
alpine tar czf /backup/my_volume_$(date +%F).tar.gz -C /volume .
docker run --rm \
-v my_volume:/volume \
-v /backup/docker/volumes:/backup \
alpine tar xzf /backup/my_volume_2025-12-09.tar.gz -C /volume
rsync -a --delete /var/lib/docker/volumes/my_volume/_data/ /backup/docker/volumes/my_volume_$(date +%F)/rsync -a --delete /backup/docker/volumes/my_volume_2025-12-09/ /var/lib/docker/volumes/my_volume/_data/cp /path/to/docker-compose.yml /backup/docker/compose/sudo cp /etc/docker/daemon.json /backup/docker/configs/daemon.json-$(date +%F)#!/usr/bin/env bash
set -e
VOLUME=my_volume
BACKUP_DIR=/backup/docker/volumes
TS=$(date +%Y%m%d_%H%M%S)
FILE=$BACKUP_DIR/${VOLUME}_${TS}.tar.gz
docker run --rm -v $VOLUME:/volume:ro -v $BACKUP_DIR:/backup \
alpine tar czf $FILE -C /volume .
sha256sum $FILE > $FILE.sha256
echo "Backup: $FILE ($(stat -c%s $FILE) bytes), SHA256: $(cut -d' ' -f1 $FILE.sha256)"
0 2 * * * /usr/local/bin/backup_volume.shsha256sum -c /backup/docker/volumes/my_volume_*.tar.gz.sha256三、恢复流程与示例
docker load -i /backup/docker/images/myimage_2025-12-09.tardocker run --rm \
-v my_volume:/volume \
-v /backup/docker/volumes:/backup \
alpine tar xzf /backup/my_volume_2025-12-09.tar.gz -C /volume
docker cp /backup/docker/containers/<容器名>_html_2025-12-09 <容器名或ID>:/var/www/htmldocker-compose up -d(若镜像不存在会自动拉取或先执行docker load导入)四、高级场景与注意事项