1. 程式人生 > >【轉】 Jenkins修改時區(Docker)

【轉】 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