问题描述
近日将 Vaultwarden 升级后,发现无法登录,提示"无效的主密码"。但确认邮箱地址和密码都正确,且账户确实是在该服务器上创建的。
排查过程
1. 检查日志
查看 Vaultwarden 容器日志,发现大量如下错误:
Username or password is incorrect. Try again.
Error decoding JWT: Error(InvalidSignature)
Token is invalid
同时注意到 POST /identity/accounts/prelogin/password => 200 OK,说明新版客户端请求的端点已经支持。
2. 检查数据文件
进入服务器检查数据目录:
cd /home/data/bitwarden/data
ls -la db.sqlite3
发现数据库文件存在且大小正常,但修改时间停留在升级前。
3. 发现根本原因
检查当前容器的挂载路径:
docker inspect bitwarden --format='{{range .Mounts}}{{.Source}} -> {{.Destination}}\n{{end}}'
发现 1Panel 升级应用后,数据卷路径从原来的:
/home/data/bitwarden/data
变成了:
/home/app/1panel/1panel/apps/bitwarden/bitwarden/data
容器实际读取的是新路径下的空目录,导致所有用户数据"消失",密码验证自然失败。
解决方案
将 Docker 容器的挂载路径修改回原来的数据目录:
# 编辑 docker-compose.yml 或 1Panel 应用配置
# 将 volumes 中的挂载路径从:
# - /home/app/1panel/1panel/apps/bitwarden/bitwarden/data:/data
# 改回:
# - /home/data/bitwarden/data:/data
# 重启容器
docker-compose down
docker-compose up -d
验证结果
修改挂载路径后,容器能正确读取原有数据库,登录恢复正常。所有密码库数据完好无损。
经验总结
1. 1Panel 升级的风险
1Panel 的应用商店升级机制会重新生成 docker-compose 配置,可能导致:
- 数据卷路径变更
- 环境变量重置(如
JWT_SECRET、ADMIN_TOKEN) - 端口映射变化
2. 升级前必做检查清单
- 备份数据目录(
db.sqlite3及附件) - 记录当前环境变量(特别是
JWT_SECRET、ADMIN_TOKEN) - 截图或记录当前的挂载路径配置
- 确认升级后的配置与升级前一致
3. 建议的环境变量配置
在 docker-compose.yml 中显式设置以下环境变量,避免升级后密钥随机变化:
environment:
- ADMIN_TOKEN=your-fixed-admin-token
- JWT_SECRET=your-fixed-jwt-secret
- SIGNUPS_ALLOWED=false
4. 数据目录建议
建议将 Vaultwarden 数据目录放在独立于 1Panel 应用目录的位置,如 /home/data/bitwarden/data,避免被 1Panel 升级机制影响。
相关错误参考
如果升级后确实遇到密码验证失败且数据目录正确,可能是 JWT_SECRET 变化导致。此时需要:
- 在 docker-compose.yml 中固定
JWT_SECRET - 清除数据库中的设备记录(
DELETE FROM devices;) - 重新登录生成新的 JWT token
本文记录了一次 Vaultwarden 升级后的故障排查过程,希望能帮助遇到类似问题的用户快速定位。