docker容器时间和系统时间相差8小时

avatar 2020年4月20日23:46:43 评论 2,530 次浏览

前几天公司上了一个项目,使用ffmpeg进行视频和音频合成程序,依赖的不多,只需要从MQ从获取消息,然后从oss中下载文件,进行合成后在传到OSS上,这个程序只依赖JAVA,所以需要跑在JAVA环境上,为了避免高峰期堆积MQ。所以,我们就想把所有程序都跑在docker容器上,因为我们跑多个程序上时出现的堆积并没有下降,所以跑在docker容器上比较方便。

[root@www.wulaoer.org ~]# docker run -itd --name jad1.8 ffmpeg1.0:latest /bin/bash
115c9ac107eee5e6cc2d0d56b5591fc81543f15d5017d6953b1cf8d4e1d29a63
[root@www.wulaoer.org ~]# docker exec -it  jad1.8 /bin/bash
[root@115c9ac107ee /]# date
Sat Apr 18 01:11:54 UTC 2020
[root@115c9ac107ee /]# exit
exit
[root@www.wulaoer.org ~]# date
Sat Apr 18 09:11:59 CST 2020

本地时间和系统时间相差时间是8个小时,注意一下时区,容器中的时区是UTC,我系统的时区是CST。为了两个时间一直,所以我需要统一一下时区,

[root@115c9ac107ee /]# cp  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
cp: overwrite '/etc/localtime'? y
[root@115c9ac107ee /]# date
Sat Apr 18 09:16:50 CST 2020

我在容器中修改一下时区,时间就同步过来了,也可以把本地的时区copy一下,copy到容器中。

[root@www.wulaoer.org ~]# docker cp /etc/localtime 115c9ac107ee:/etc/localtime

不过这种方式,系统的时间和是一致了,但是在容器中跑的应用实践不一致了,应用日志时间还是和系统的时间相差8小时,这个有的说在java里设置一下时区,但是我的是跑springboot的,所以,没有办法,这个方案不行,第二种就是安装ntp进行同步时间,不过这个太繁琐了,后来,一个同事告诉我,可以在创建容器的时候指定时区。

root@www.wulaoer.org ~]# docker run -it  --name ffmpeg2.0 --env TZ=Asia/Shanghai  --privileged=true centos:7.2.1511 /bin/bash
[root@02272146041f /]#

直接使用了变量--env TZ=Asia/Shanghai生成的容器,日志时间一致了,问题解决,这个可以我们在写dockerfile中加上去,下章说一下dockerfile的用法。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: