发现此问题是源于一个定时的功能,根据当前时间获取一小时之内的数据,可是我拿到的总是八小时之前的数据,?

后来问题的原因所在:

首先查看服务器时间

[root@localhost ~]# date
2018年 12月 17日 星期一 22:42:44 CST

然后进入搬运工容器,使用同样的命令查看时间

[root@localhost ~]# date
2016年 07月 27日 星期三 14:42:44 UTC

What???

经过一系列百度操作

CST应该是指(中国上海时间,东八区时间) 
UTC应该是指(Coordinated Universal Time,标准时间) 
所以,这2个时间实际上应该相差8个小时,必须统一两者的时区。

原来是因为我们下拉的的的OpenJDK和MySQL的的官方镜像都是默认的零时区,而北京时间在东八区。这样算下来,刚刚好是容器的时间和宿主机的时间相差八个小时。

解决方法:

1.如果是用dockerfile构建镜像时,Dockerfile里面添加如下语句,指定时区:

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

&& echo 'Asia/Shanghai' >/etc/timezone

 

2.如果使用maven插件构建好的镜像,在启动时用“-v”参数指定共享宿主机时间,如镜像ID为e44a34f8e997,启动容器并重命名为myContainer中,映射宿主机端口9999到容器8888:

docker run --name mycontainer -v /etc/localtime:/etc/localtime:ro -p 9999:8888 e44a34f8997

3.如果使用docker-compose成启动服务,把宿主机的时间作为数据卷挂载到容器里,设置文件权限为只读,防止被程序修改在搬运工-compsoe.yaml的每一个服务添加下面的代码

    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro

以上。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐