docker - 时间不对
java显示通过用户的配置 user.timezone 作为时区信息的, 如果user.timezone 没有配置就会获取运行平台(linux)的配置的Zone ID作为时区信息的,如果最后程序还是没有获取到时区信息 就会使用GMT时间作为最后的时区信息(就是使用GMT+0)作为最后的时区信息。
这篇文章中推荐解决办法是在增加-Duser.timezone=Asia/Shanghai启动参数来解决问题。 这是一种方案。
但是我还是没有弄明白我之前的解决方案为何不行, 因为我的解决方法应该符合java获取时区的第二种方式的。 最后我还是在这篇文章中找到原因,文章中说的centos的系统的/etc/localtime文件是使用软连接的方式指向 /usr/share/zoneinfo/Asia/Shanghai的。所以centos的时区就是Asia/Shanghai。 于是我就怀疑我的宿主机(ubuntu)也是使用的软连接的方式, 于是我运行命令:
发现确实如此啊, 我使用docker的-v 挂载的/etc/localtime 实际上只是宿主机的一个软连接,所以容器中得时区不对
解决办法: 将真实的宿主机的时区文件挂载到容器的时区文件中就可以解决时区不对的问题
下面是我的Dockerfile文件和启动命令:
FROM adoptopenjdk:11-jre-hotspot # 设置容器的时区 RUN mkdir /opt/app ADD xSpider-1.0-SNAPSHOT /opt/app/spider EXPOSE 8443 VOLUME /log VOLUME /home/ubuntu/mzitu # 挂载时区的目录 VOLUME /usr/share/zoneinfo # 设置时区为上海 ENV TZ=Asia/Shanghai # 设置时区信息 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 启动程序的脚本 ENTRYPOINT ["/opt/app/spider/bin/xSpider"]
启动命令:
sudo docker run -d -v /usr/share/zoneinfo:/usr/share/zoneinfo --name xspider -p 8443:8443 xspider:v1
转自:
https://blog.csdn.net/leisurelen/article/details/106868962
posted on 2021-08-13 10:05 TrustNature 阅读(463) 评论(0) 收藏 举报
浙公网安备 33010602011771号