使用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这个文件吧
可以将宿主机的文件挂载到容器内部
使用如下方式挂载:
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐