使用K8s启动容器,有可能出现系统时区不一致的问题,因为默认 系统时间为 UTC 世界时间 (Universal Time Coordinated),一般本地所属时区为 CST(+8 时区,上海时间),时间上刚好相差 8 个小时。这就导致了,我们服务启动后,获取系统时间来进行相关操作,例如存入数据库、时间换算、日志记录等,都会出现时间不一致的问题,所以很有必要解决掉容器内时区不统一的问题。
在打镜像时,可以通过指定系统时区来解决这个问题
Dockerfile:
FROM java:8-alpine
ADD biz-0.0.1-SNAPSHOT.jar app.jar
ENV k8s-config-path /root/.kube
ENV harbor-secret harborsecret
ENV harbor-username admin
ENV harbor-password Harbor12345
ENV harbor-url http://172.16.10.190:80/api
EXPOSE 8300
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java","-jar", "/app.jar"]
其中通过添加以下命令,使得时区指定为/Asia/Shanghai
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
上面这种办法有时不生效,可能因为容器内没有/usr/share/zoneinfo/Asia/Shanghai这个文件吧
可以将宿主机的文件挂载到容器内部
使用如下方式挂载: