一、概述
使用Docker来进行微服务项目的部署是很常见的。
笔者在部署微服务项目的时候遇到了一个问题,在Docker上部署的Java项目,通过new Date()获取到的时间比宿主机的时间差了8小时。
程序里面是会有获取时间的操作的,这样的时差显然不能接受。
二、解决方案
经过笔者的一番查阅,原来Docker的默认时区的UTC,与我们的时间相差了8小时。
需要通过更改Docker容器的时区来解决这个问题。
修改时区的方式有很多种,可以进入容器修改时区、在执行docker run命令的时候指定时区。
但上述方式每次创建容器,都需要重新指定。不利于持续化集成部署。
因此笔者采用修改dockerfile的方式,来指定镜像构建时的时区。
# 设置本地时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置时区为亚洲上海
RUN echo 'Asia/Shanghai' > /etc/timezone
只需要在dockerfile中加上这个命令即可,这样构建出来的镜像默认就是中国时区了。
如果使用的是Alpine linux版的基础镜像,默认是没有/usr/share/zoneinfo下的时区文件的。
此时可以在dockerfile中通过包管理器下载时区文件。示例如下
# 精简版linux镜像没有时区文件,所以要先下载时区文件
RUN apt-get update && apt-get install -y tzdata
# 设置本地时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置时区为亚洲上海
RUN echo 'Asia/Shanghai' > /etc/timezone

5166

被折叠的 条评论
为什么被折叠?



