解决 Docker 容器内时区不一致问题

本贴最后更新于 1922 天前,其中的信息可能已经东海扬尘

问题描述

joine-admin 模块部署在 K8S 上,通过查看日志发现,时间晚了 8 小时,遂猜想是时区问题。

排查问题

操作记录:

  1. 查看 k8s 指定命名空间下启动的容器
kubectl get po -n mynamespace
  1. 查看指定容器日志
kubectl logs -f --tail=200 -n mynamespace mycontainername

8F41B1594606BE43EA40AB8682B1CEC1.jpg

解决问题

操作记录:

  1. 首先,进入容器内查看系统时间,判断日期是否正确。
kubectl exec -it mycontainername -n mycoach -- /bin/sh
/ # date
Sun Aug 18 09:29:17 UTC 2019

可以看到,这里的时区并不是东八区,找到问题根源

CST 应该是指(China Shanghai Time,东八区时间)
UTC 应该是指(Coordinated Universal Time,标准时间)

  1. 为了解决容器内时区问题,我们需要修改系统两处文件:/etc/localtime/etc/timezone

  2. 为了减少操作,自动化执行,此处我们采用修改 Dockerfile 的方式

  • 修改前
FROM java:8 
ADD target/Joine.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
  • 修改后
FROM java:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	&& echo 'Asia/Shanghai' >/etc/timezone
ADD target/Joine.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

完成

再次发布新版本,查看日志,时间已经恢复正常,至此问题解决。

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    491 引用 • 917 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...