绑定挂载备份本质是直接备份宿主机真实目录,需确认路径有效、权限一致、服务停写;用tar做带时间戳压缩快照,rsync实现增量与远程同步;恢复时注意UID/GID匹配和--same-owner保留归属。
绑定挂载(Bind Mount)的备份本质是备份宿主机上的真实目录,不经过 Docker 卷管理层,所以方法直接、可控,但需特别注意路径有效性、权限一致性和服务停写时机。
先明确容器启动时用的宿主机路径,例如 -v /data/app/uploads:/app/uploads,那真实数据就在 /data/app/uploads。执行以下命令验证:
ls -ld /data/app/uploads 确认目录存在且权限可读find /data/app/uploads -maxdepth 0 -type d -perm /o=w 2>/dev/null 检查是否被其他进程写入中(避免备份时文件被修改)这是最常用也最稳妥的方式,适合中小规模数据。推荐加时间戳和压缩:
tar --exclude='./tmp' --exclude='./cache' -czf /backup/uploads_$(date +%Y%m%d_%H%M).tar.gz -C /data/app uploads--exclude 可跳过临时目录,减小体积并提升一致性/backup/ 应独立于源目录所在磁盘,防止单盘故障导致双失当数据量大或需频繁备份时,rsync 更高效,支持断点续传和异地容灾:
rsync -av --delete --exclude='tmp/' /data/app/uploads/ /backup/uploads/
rsync -avz --delete /data/app/uploads/ user@backup-server:/backup/app/
--delete 保证目标与源严格一致;首次运行前建议加 --dry-run 预览备份还原后若容器无法读写,大概率是用户 UID/GID 不匹配:
ls -ld /data/app/uploads,如显示 drwxr-xr-x 3 1001:1001
tar -xzf backup.tar.gz -C /data/app --same-owner 保留归属