1、分别查看宿主机时间和容器时间
宿主机时间
root@fcaad17f146a:/# date Fri Jan 11 14:17:53 CST 2019
容器时间
[root@001 ~]# docker exec -ti 87986863838b /bin/bash root@fcaad17f146a:/# date Fri May 11 06:17:55 UTC 2019
发现两者的时间相差8个小时
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
2、统一两者的时区有下面几种方法
1)共享主机的localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。
docker run -ti -d --name my-nginx --restart=always -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash
2)复制主机的localtime
[root@002 ~]# docker cp /etc/localtime fcaad17f146a:/etc/
此时容器的时间已经设置成和宿主机相同的时间
3)复制上海时区到/etc/localtime(建议用这个方法)
root@002:/# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime root@002:/# date Thu Jun 13 12:11:01 CST 2019
4) timedatactl 命令
timedatactl set-timezone Asia/Shanghai
因为jenkins是java开发,java环境读取的时间是根据/etc/timezone的
查看一下这个文件的内容
root@fcaad17f146a:/# cat /etc/timezone Etc/UTC
因此需要把UTC改为CST,或者在UTC的基础上加8小时
root@fcaad17f146a:/# sed -i 's/UTC/UTC+8/' /etc/timezone root@fcaad17f146a:/# cat /etc/timezone Etc/UTC+8
回到jenkins去构建发现时间已经正常,若不正常就重启jenkins
注意:新建用户时,需要给用户设置时区为 Asia/Shanghai,不然新建的用户登录后时区时Asia/Yakutsk,比北京时间快一个小时,构建历史记录显示的也是YAKT时间。