docker容器修改時區(java應用log信息與標准容器時間有八個小時時間差)


  在docker容器中運行的java應用打出的日志時間和通過date -R方式獲取的容器標准時間有八個小時時間差~

  因為docker容器的原生時區為0時區,為了和國內時區保持一致,需要把容器時區調為東八區,方法非常簡單,在/usr/share/zoneinfo目錄下面有大量的時區文件,涵蓋各個時區,根據自己的需求直接把對應的文件拷貝到/etc目錄下,重命名為localtime文件即可。

  

  隨后發現一個問題,雖然docker容器的時區已經修改為東八區了,但是容器中的java應用打出的log日志時間仍然和上海時間有很大的時間差,因此,寫了一段代碼來測試

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容器中獲取時間。這種情況有兩種解決方案:

一 、使用TZ環境變量,然后再運行Java程序

  export TZ=Asia/Shanghai(寫到/etc/profile文件中然后重啟系統生效)

  再運行java測試程序,結果變為

 

二、使用 -Duser.timezone=GMT+08 作為Java虛擬機的系統參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM