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