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

猜你喜欢

转载自blog.csdn.net/qq_31977125/article/details/83015122