在使用docker情况下因为docker镜像上的时区和语言和宿主机不一样,为了解决这个问题。首先要了解docker上的镜像系统,
查看系统命令cat /etc/issue 或cat /etc/redhat-release。
如果和宿主机一样的系统可以使用 -v参数把时区和语言映射,举例
docker run -it -p -v /etc/localtime:/etc/ imagesid
也可以使用
docker cp /etc/localtime containerid:/etc/
使用上述方法需要宿主机和docker里面系统是一致的。
也可以使用自定义DOCKERFILE文件方法
写法
FROM java:8-jre
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' >/etc/timezone
这对centos和unbuntu没有问题,其它linux系统写法有
1、docker run -e TZ=Asia/Shanghai
2、tzselect timeconfig dpkg-reconfigure tzdata
使用Alpine Linux的docker镜像,那不能在原有镜像上修改,只能自定义image
修改Dockerfile文件内容
增加安装tzdata包
#定义环境变量
ENV TIME_ZONE Asiz/Shanghai
#dockerfile增加命令
#安装tzdata安装包
&& apk add --no-cache tzdata \
#设置时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
或者
apk add -U tzdata
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
最后java程序会遇到日志里的时间还是没有调整过来,这和虚拟机有关
运行java程序时候加入JVM参数 -Duser.timezone=GMT+08 指定时区