docker exec api date -u date -u docker exec api date +%s%N
同一时刻宿主机 date 是 10:23:41,容器里是 10:12:07,差了 11 分 34 秒。JWT 校验开始偶发报 token expired。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:容器默认和宿主机共用内核时钟,正常不会漂。差这么多通常是镜像里装了 NTP 客户端,容器启动时自己校时失败,把系统时间往回拨了。
围绕「容器时钟漂移」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:对比宿主机和容器的 date 与 uptime 确认差值是固定还是持续变大;检查镜像里有没有 ntpd chronyd 这类服务被入口脚本拉起来;容器里应该只保留时区设置 不要再跑校时进程;改完重启容器 连续观察一小时看差值是否稳定。
确认没问题再收工,两边时间差在毫秒级,JWT 过期报错消失,日志时间也能对上。
