作者:手机用户2502895293 | 来源:互联网 | 2023-08-07 14:35
在使用dockerjenkins的构建历史记录(BuildHistory)时间不正确1.现象2.查看时间2.1查看宿主机时间[rootVM_0_9_centos~]#dateM
在使用docker+jenkins的构建历史记录(Build History)时间不正确
1.现象
2.查看时间
2.1 查看宿主机时间
[root@VM_0_9_centos ~]# date
Mon Jan 13 19:05:05 CST 2020
使用date命令即可查看当前宿主机时间
2.2 查看容器时间
[root@VM_0_9_centos ~]# docker exec -ti jenkins /bin/bash
root@b62434a5f6ff:/# date
Mon Jan 13 11:07:03 UTC 2020
通过这个docker exec --help命令查看docker exec的用法。
结果发现两者的时间相差6个多小时。
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)。
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)。
3.解决方法
3.1 共享主机的localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。
docker run -p 8080:8080 -p 50000:5000 --name jenkins -u root -v /mydata/jenkins_home:/var/jenkins_home /etc/localtime:/etc/localtime:ro -d jenkins/jenkins:lts
jenkins:2.19.3
3.2 复制主机的localtime
root@b62434a5f6ff:/# docker cp /etc/localtime b62434a5f6ff:/etc/
此时容器的时间已经设置成和宿主机相同的时间。
3.3 复制上海时区到/etc/localtime(建议用这个方法)
root@b62434a5f6ff:/# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
root@b62434a5f6ff:/# date
Mon Jan 13 19:09:02 CST 2020
这里时间就变成CST时间【东八区时间】了。
4.原因分析
因为jenkins是java开发,java环境读取的时间是根据/etc/timezone的。
查看一下这个文件的内容:
root@b62434a5f6ff:/# cat /etc/timezone
Etc/UTC
root@b62434a5f6ff:/#
因此需要把UTC改为CST,或者在UTC的基础上加8小时。
root@b62434a5f6ff:/# sed -i ‘s/UTC/UTC+8/’ /etc/timezone
root@b62434a5f6ff:/# cat /etc/timezone
Etc/UTC+8
root@b62434a5f6ff:/#
回到jenkins去构建发现时间已经正常,若不正常就重启jenkins。