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

 

相關文章
相關標籤/搜索