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"]

转自:

https://blog.csdn.net/leisurelen/article/details/106868962

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值