解决方法
一、先查看服务器和容器时区设置是否一致:
1、docker容器内的时区是UTC
2、主机的时区是CTS
二、这两个时区有什么不同呢?
GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时
CTS:
China Standard Time,UTC+8:00 中国沿海时间(北京时间)
UTC:
Universal Time Coordinated 世界协调时间
三、如何解决?(设置时区一致)
解决的时候做了三种尝试:
第一次在服务镜像所依赖的镜像tomcat的Dockerfile中加入如下设置:
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
重新构建镜像,启动容器,发现和此tomcat镜像在同一台服务器上的服务时区和时间均修改成功,但是不在同一台服务器上的docker容器还是UTC时区,时间不一致。
第二次,容器启动的时候挂个参数,让其使用主机服务器上的时间:
docker run -d --name demo-service --rm -p 8084:8080 -v /usr/local/tomcat/logs/tomcat8080:/usr/local/tomcat/logs -v /etc/localtime:/etc/localtime demo-service:1.0.0
其中加入的 -v /etc/localtime:/etc/localtime就是时间的设置,设置好后,启动容器,进入容器内部,打date命令,输出的时间和主机时间一样,然后查看tomcat日志,发现日志的时间没有变还是比主机晚8个小时。
于是,寻求另一种解决办法。
第三次,在各个服务的Dockerfile中加入对时区和时间的设置,如第一次尝试的Dockerfile中加入的内容。
重新使用Jenkins构建服务,实验成功!