docker容器修改时区(java应用log信息与标准容器时间有八个小时时间差)

在docker容器中运行的java应用打出的日志时间和经过date -R方式获取的容器标准时间有八个小时时间差~java

  由于docker容器的原生时区为0时区,为了和国内时区保持一致,须要把容器时区调为东八区,方法很是简单,在/usr/share/zoneinfo目录下面有大量的时区文件,涵盖各个时区,根据本身的需求直接把对应的文件拷贝到/etc目录下,重命名为localtime文件便可。sql

  

随后发现一个问题,虽然docker容器的时区已经修改成东八区了,可是容器中的java应用打出的log日志时间仍然和上海时间有很大的时间差,所以,写了一段代码来测试docker

复制代码
import java.sql.Timestamp;
import java.util.TimeZone;

public class test { public static void main(String [] args){ TimeZone tz = TimeZone.getDefault(); System.out.println("tz: " + tz); Timestamp curTime = new Timestamp(System.currentTimeMillis()); System.out.println("时间: " + curTime); } }
复制代码

  发现结果为:测试

 

  结果显示java程序输出的是洛杉矶时区的时间,说明java并无直接从docker容器中获取时间。这种状况有两种解决方案:spa

一 、使用TZ环境变量,而后再运行Java程序日志

  export TZ=Asia/Shanghai(写到/etc/profile文件中而后重启系统生效)code

  再运行java测试程序,结果变为blog

 

2、使用 -Duser.timezone=GMT+08 做为Java虚拟机的系统参数get

 

相关文章
相关标签/搜索