应用查询出来的时间与数据库中存储的时间相差8小时(典型时区问题)

37 阅读1分钟

问题:应用查询出来的时间与数据库中存储的时间相差8小时(典型时区问题)

排查步骤:

1. 检查代码中数据库连接配置

2. 查看服务器的时区

在服务器执行 date 命令查看当前时间

3. 应用采用docker部署,基础镜像使用的时区

利用docker exec -it 容器名字 /bin/bash

执行 date 命令查看当前时间

原因分析

最终发现是dockerfile中基础镜像的时区不对导致

解决方案

#变更前
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:9.0.107-jdk21-temurin

#变更后
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:9.0.107-jdk21-temurin
# 设置时区为东八区(上海)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone