玩 NAS 最绝望的一分钟:你的 Docker 数据不会备份?
折腾 NAS 最大的乐趣是什么?
装各种乱七八糟的 Docker。
搭个小雅,配好上万部电影的刮削。搭个 NextCloud,把全家的照片都存进去。搭个 Bitwarden,存下所有的密码。
看着满屏绿色的 “Running”,成就感拉满。
然后,有一天。系统崩溃了。
或者你不小心手贱,点错了更新按钮。
容器没了。
你安慰自己:没事,我有 docker-compose.yml 备份,重新跑一下就行。
等你跑完,打开网页。
傻眼了。
账号怎么全没了?我幸幸苦苦刮削的海报墙呢?我的笔记呢?
恭喜你,你只是备份了”程序”,根本没有备份”数据”。
━━━━━━━━━━━━━━━
一、为什么备份配置文件没用?
NAS 圈有个经久不衰的月经贴:Docker 数据怎么存?
很多人以为,只要把那几行 YAML 代码保存下来,就万事大吉了。
什么概念?
这就像你买了一套房,你只备份了房子的图纸,却没有备份放在保险柜里的房产证和金条。
房子塌了,图纸能帮你把空壳建起来。但保险柜里的东西,再也找不回来了。
Docker 容器本身是无状态的,可以随便删。但里面的数据,必须挂载出来。
如果你用的是 Bind Mounts(直接挂载到主机的文件夹),那还好办。连着文件夹一起备份就行。
但如果你用的是 Named Volumes(命名卷,数据存在被 Docker 藏起来的 /var/lib/docker/volumes 里)呢?
大部分人,压根不知道这地方的存在。
更糟糕的是第二点。
二、数据库,不能随意直接拷
我直接把整个共享文件夹定时复制一份,不就行了?
群晖的 Hyper Backup,极空间的备份工具,都是这么干的。
但这里有个大坑。
如果你跑了数据库(比如 MySQL、PostgreSQL),当数据库正在运行、正在写入数据的时候,你突然把底层文件拷贝走。
这份备份,极大概率是坏的。
什么意思?
数据库在写字写到一半,你把纸抽走复印了一份。复印出来的永远是残缺的半截话。
等你哪天真的需要恢复数据时,才会发现:没有验证过的备份,等于薛定谔的备份。
恢复的时候,直接报数据库损坏。
折腾一晚上搭好的一百个服务 vs 坏一块硬盘瞬间回到解放前。
够不够刺激?
三、Reddit 万人热议的方案
那到底该怎么办?
最近在知名自托管社区 r/selfhosted 上,跑出了一个爆帖:《你们是怎么备份 Docker 的?》
我带大家看看,真正的极客是怎么干的。
他们有一条金标准:备份数据库(及其挂载的卷),必须先暂停容器。
听起来很麻烦?
不需要自己写脚本。社区里有两个被推爆的高分工具。
方案 1:offen/docker-volume-backup (小白首选)
这是目前最受推荐的自动化工具。安装包不到 25MB。
它怎么工作?
你把它当成一个普通的 Docker 容器跑起来。它会按照你设定的时间(比如每天凌晨 3 点):
- 自动暂停你需要备份的容器(保证数据完整)
- 把数据打包压缩
- 发送到你的云端(支持 S3、WebDAV,甚至百度网盘/阿里云盘的 WebDAV 挂载)
- 自动重启容器
- 在旧备份太多时,自动帮你删掉更早的
不需要你敲几百行代码,写个配置文件丢进去,全自动运行。
方案 2:BretFisher/vackup (极客之选)
这是由 Docker 官方认证专家 (Docker Captain) 写的脚本工具。
如果你不想搞复杂的定时发云端,只想在本地偶尔手动把某个隐藏的很深的 Volume 导出来存好。
用这个 vackup 工具,两行命令,直接把 Volume 变成一个干净的 .tar.gz 压缩包。
想恢复?也是一句命令。
(注:现在新版 Docker Desktop 已经内置类似功能,但 NAS 玩家往往没有 Desktop 界面,这个脚本依然是神器。)
⚠️ 关于 Duplicati 的排雷
很多老教程会推荐用 Duplicati 来做备份。
听奶爸的,别用。
在 Reddit 的那个帖子里,大量重度用户血泪控诉:这玩意长期运行后,它自己的数据库极其容易损坏。
你要用它恢复数据的时候,它告诉你它自己坏了。
这就是套娃式悲剧。
如果只是备份普通文件夹(Bind Mounts),老老实实用 Restic 或者群晖自带的 Hyper Backup。甚至最古老的 Rsync 都比它靠谱。
真正的玩家,不是看谁搭的服务多。
而是看谁在硬盘冒烟的那一刻,还能气定神闲地去泡杯咖啡。
你的 Docker 文件夹,昨晚备份了吗?
关注科技奶爸,下周教你实操部署自动化备份库。
参考来源
- How do you back up your docker volumes? - r/selfhosted (Reddit)
- offen/docker-volume-backup 官方 GitHub
- BretFisher/docker-vackup 官方 GitHub
━━━━━━━━━━━━━━━
#NAS #Docker #数据备份 #群晖 #极空间 #服务器防灾