Docker部署微服务项目时区问题

一、概述

使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值