一次 TeslaMate 部署踩坑记录:群晖 Container Manager 卷删除不干净与 PostgreSQL 升级翻车
最近帮朋友在群晖 NAS 上重新部署 TeslaMate,本以为是个很常规的 Docker 项目部署任务,结果一路踩坑,最后发现问题的根源居然是卷删除不干净加上之前人操作不规范。这次经历挺有代表性,所以写下来给后来者一个参考。
背景
朋友的 TeslaMate 是很早之前找人远程部署的(付费),当时使用的是 PostgreSQL 15,说是没跑多久他就停用了。
近期我帮他升级到 PostgreSQL 17,因为是全新部署、旧数据全部不要,本来以为只要删掉旧卷,启动新容器就能完成初始化。
没想到,一启动容器就看到熟悉的红字:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 17.4.
这意思很明显:新容器挂载的卷里还躺着 PG15 的数据文件。
以为删除了,其实没删干净
因我之前已经在 群晖 Container Manager 里找到旧的数据库卷(teslamate_teslamate-db),直接点击删除。
GUI 提示删除成功,却启动不成功。
后来才发现,这里有两个坑:
-
群晖 Container Manager 删除卷 ≠ 实际数据清除
-
群晖的卷管理只删除它“识别”的卷记录,但底层的 /var/lib/docker/volumes/ 目录里的真实数据可能依然存在。
-
特别是如果之前部署的人卷映射方式不规范(比如直接映射到 /var/lib/postgresql/data 而没用标准命名卷),GUI 可能根本不会显示这些卷。
-
-
之前的部署方式不规范
-
之前帮他部署的人可能没有用 Docker Compose 或标准卷定义,而是直接在容器里用默认路径初始化数据库。
-
这种方式虽然能跑,但清理时很容易漏掉数据残留。
-
最终解决办法
只能上 SSH,直接在命令行处理:
# 查看所有卷
docker volume ls
# 删除 teslamate_teslamate-db 卷
docker stop teslamate-database-1 #避免web显示停止实际仍在使用
docker volume rm teslamate_teslamate-db
删除卷后,通过群晖 Container Manager 构建重启整个项目(而不是单个容器),让 Docker 自动重新创建空卷并用 PG17 初始化。
这次终于没有报错,TeslaMate 顺利跑起来。

总结 & 建议
-
删除卷要在命令行确认
群晖的 GUI 操作不一定能删除底层数据,尤其是之前部署不规范时。
-
升级 PostgreSQL 要确保数据目录版本一致
如果是全新部署且无数据需求,最稳妥的办法就是先清空旧卷再启动新容器。
-
尽量使用 Compose 或规范化部署
这样卷的管理、迁移和清理都会更可控,避免“数据残留”坑。
这次算是帮朋友做了个“升级 + 清理”大扫除,顺便也帮他补上了之前远程部署遗留的隐患。
如果你在群晖上部署 TeslaMate 或其他 PostgreSQL 服务,记得多留个心眼——GUI 删除不等于物理删除。
