docker容器的时间和主机的时间相差八小时

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

后来问题的原因所在:

首先查看服务器时间

[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

以上。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值