docker容器的时间和主机的时间相差八小时
发现此问题是源于一个定时的功能,根据当前时间获取一小时之内的数据,可是我拿到的总是八小时之前的数据,????后来问题的原因所在:首先查看服务器时间[root@localhost ~]# date2018年 12月 17日 星期一 22:42:44 CST然后进入搬运工容器,使用同样的命令查看时间[root@localhost ~]# date2016年 07月 27日 星期三...
发现此问题是源于一个定时的功能,根据当前时间获取一小时之内的数据,可是我拿到的总是八小时之前的数据,?
后来问题的原因所在:
首先查看服务器时间
[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
以上。
更多推荐
所有评论(0)