【转】 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
上一篇: Jenkins安装
下一篇: Docker:Jenkins:修改时区