Alpine镜像内的Java时区问题

docker的精简镜像alpine内没有时区信息,在基于该镜像制作应用镜像时,需要配置时区信息,之前的做法是在其他容器时将宿主机的时区配置挂载到容器,如下所示:

docker run -itd -v /etc/localtime:/etc/localtime alpine bash
进入到容器内,时间确实已经是东八区时间:

bash-4.3# date
Tue Aug 7 09:32:21 CST 2018
但是对于Java应用来说,读取到的时间依然不是东八区时间,还需要挂载下面的时区文件才可以

docker run -itd -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone alpine bash
附 Java读取系统时区配置

方法一

在 tomcat的jvm 运行参数加上 -Duser.timezone=GMT+8,使用该配置,应用程序就会忽略系统设置的时区

方法二

配置文件/etc/sysconfig/clock,在文件内增加以下信息

ZONE=”Asia/Shanghai”
UTC=false
ARC=false
方法三

配置时区:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo “Asia/Shanghai”>>/etc/timezone