【轉】 Jenkins修改時區(Docker)
問題
通過官方的jenkins容器執行jenkins服務,但是發現jenkins的時間與docker容器內的時間相同,但都與北京時間正好差8個小時。基本確定時區問題
檢視jenkins的docker容器時間:
docker exec
檢視Jenkins的時間
在“jenkins的UI-》系統管理-》系統資訊”中有user.timezone的欄位
分析
時間相差8個小時,基本可以確定時區問題。所以上網搜尋了些內容,基本解決辦法如下
方法1
jenkins官方修改時區的方法。但是基本都是通過修改jenkins、java的引數來達到目的的。目前使用docker容器沒辦法處理。
方法2
修改/etc/localtime檔案的方法。按照這個方法處理了,但是容器的系統時間與當地時間相同了,但是jenkins的時間還是相差8個小時。
再分析
既然docker容器的時間正確了,但是jenkins的時間還是不對的,說明jenkins的時區使用的不是/etc/localtime,而是另有他處。
在jenkins-》系統管理-》系統資訊中可以看到有關時區的是user.timezone屬性值是Etc/UTC。哪裡存放的這個值呢,應該是/etc/timezone了。所以嘗試下/etc/timezone的設定。
$docker exec my-jenkins cat /etc/timezone Etc/UTC
可以看到時區是Etc/UTC,基本上可以確定是這裡導致的了
備註:通過驗證debian系列才有timezone這個檔案的,在centos中是沒有這個檔案的。所以確定jenkins的docker容器是基於debian系的linux
解決
修改/etc/localtime,修改容器的時間
修改/etc/timezone,修改jenkins的時區
最終構建docker容器的命令如下(如有其他引數,請自行新增其他引數)
docker run -d --name ci --privileged=true -v /etc/localtime:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins
或者
docker run -d --name ci --privileged=true -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins
將/[my_path]/timezone修改為對應的路徑
如果docker宿主機系統中不存在timezone檔案,可以自行建立timezone檔案(或者從別的地方拷貝),timezone檔案的內容如下:
Asia/Shanghai