Jenkins修改時區(Docker)

說明:該文章是針對jenkins運行在docker容器中時,jenkins的時間與容器的時間不一致。而非jenkins直接運行在系統各種。不過解決問題的思路都是一致的。

問題

通過官方的jenkins容器運行jenkins服務,但是發現jenkins的時間與docker容器內的時間相同,但都與北京時間正好差8個小時。基本確定時區問題

查看jenkins的docker容器時間:

docker exec 

查看Jenkins的時間

在“jenkins的UI-》系統管理-》系統信息”中有user.timezone的字段

分析

時間相差8個小時,基本可以確定時區問題。所以上網搜索了些內容,基本解決辦法如下

  • 方法1jenkins官方修改時區的方法。但是基本都是通過修改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

解決

  1. 修改/etc/localtime,修改容器的時間
  2. 修改/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
  • 如果localtime相關的文件不存在,解決思路與timezone的類似,不再贅述。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章