时间,总是宝贵的,但是,可能你生活在超前的八小时,我生活在落后的八小时,时间不统一,从而有了时间之间的差异。
UTC和CST时间相差8个小时,宿主机上的时间是CST时间,而容器上的时间一般都是UTC时间,从而总是需要重新编译镜像来达到时间相同的目的。
你生活在什么时间,生活在过去?还是生活在现在?梦中梦。。。。
慢同步。。。慢慢同步。。。不然生活的时间跨度太大,系统会崩溃的。。。
此文主要是解决容器时间和宿主机时间不一致,从而导致在查询日志的时候出现问题(centos7)。
如何消除时间问题
1、 设置宿主机或者物理机时间
将时区设置为上海,主要使用命令timedatectl。
如果时间不准确,那么可以进行时间同步,前提是先安装ntpdate包。
将时间写入硬件时钟,再也不用担心时间重启之后要修改了,当然有ntp服务器来同步是最好的了。
2、编译镜像
在使用时区的时候,一般的镜像都是使用UTC时间,从而需要重新编译镜像,从而来修改时区,如下dockerfile文件。
[root@docker-ce elk]# docker build -t elkk . (编译镜像)
在如上的Shanghai文件,也就是/usr/share/zoneinfo/Asia/Shanghai文件,将其拷贝到dockerfile的同一级目录即可。
3、 测试
从上可以看到时间已经一致。
4、 脚本
运行脚本即可进行相关的配置
[root@docker2 ~]# cat timezone.sh
#!/usr/bin/bash
#set the system timezone
timedatectl set-timezone Asia/Shanghai
#Synchronize time
rpm -q ntpdate &>/dev/null
if [ $? == 0 ];then
ntpdate cn.pool.ntp.org
else
yum -y install ntpdate
ntpdate cn.pool.ntp.org
fi
#write the time to hardware clcok
hwclock -w
#check
date
总结
1、 主要是解决容器的时间和本地的时间不一致,从而导致日志在查看的时候,并不是真正的时间
2、 当使用elk这种日志查看的时候,必须时间进行同步,否则在日志系统中,并不能查看对应的日志。
3、 每个基础镜像不同,从而可能写dockerfile的写法不一样,这种目前仅仅在centos7上进行了测试。