最近在一台新电脑上登录 Vaultwarden 时,发现二次验证始终无法通过。第一反应是验证码本身没有问题,于是怀疑可能是服务器时区不一致导致的。
在咨询 AI 之后,发现问题很可能出在 Docker 容器的时区配置上。最初在 docker-compose.yml 中设置了环境变量:
environment:
TZ: Asia/Shanghai查询文档后,这个配置并不会生效。
尝试修复容器时区
询问ai后,发现需要在 docker-compose.yml 中增加了时区相关的挂载:
volumes:
- ./vw-data/:/data/
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro重启容器后再次尝试登录,结果依然失败。
进一步排查宿主机时间
这时进入服务器执行 date 命令,才发现宿主机时间竟然与标准时间相差了 2 分钟。而 TOTP 二次验证对时间偏差非常敏感,这正是问题的根源。
同步服务器时间
接下来手动同步服务器时间:
apt install ntpdate -y
apt install ntpsec-ntpdate -y
ntpdate time.windows.com
timedatectl set-timezone Asia/Shanghai同步完成后,重新启动容器:
docker compose up -d验证
再次登录 Vaultwarden,二次验证一次通过
问题成功解决!
