解决Docker容器时区及时间不同步问题的方法_docker

今天在系统集成测试时由测试人员提交了一个测试bug,原因是提交业务数据时间与实际时间(北京时间)有偏差,导致统计异常。由于我们集成测试是向测试人员直接提供完整的Docker镜像作为测试环境,原因应该是出在容器时间设置上。

拿到交付的docker镜像后,启动后进入容器控制台,使用date命令查看果然时间不正确。再查看宿主机时间是正确,这样肯定是容器启动时未将时区与宿主机保持同步了,由于测试镜像是由dockfile直接构建,因此问题基本了定准在dockerfile文件上了。

打开dockerfile检查后发现确实确失与宿主机时区同步设置。故在此将如何添加时区同步过程记录一下,同时给遇到过类似问题的同学以借鉴:

以下以Alpine制作的docker镜像为例(也是我们的测试镜像):

1 Dockerfile修改

1.1 增加安装tzdata包

在安装包时安装tzdata安装包,并且在构建成功后不能清理此安装包

#定义环境变量
ENV TIME_ZONE Asiz/Shanghai
#dockerfile增加命令
RUN \

 #安装tzdata安装包

 && apk add --no-cache tzdata \

 1.2 增加时区配置

安装此安装包后,会在/usr/share/zoneinfo目录下生成各时区配置信息,Alpine目录并无timezone及locatime配置,此时我们需要将时区值覆写至Alpine的timezone及localtime配置中,命令如下:

```
RUN \
...
#安装tzdata安装包
&& apk add --no-cache tzdata \
#设置时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \

至此,dockerfile的修改工作已经结束。

 2 宿主机时区及时间检查

检查宿主机时间及时间是否正确,使用以下命令:

```
[root@docker ~]# timedatectl
   Local time: Tue 2016-12-13 21:52:13 EST
 Universal time: Wed 2016-12-14 02:52:13 UTC
    RTC time: Wed 2016-12-14 02:52:13
    Time zone: America/New_York (EST, -0500) //默认为西五区
   NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
   DST active: no
Last DST change: DST ended at
         Sun 2016-11-06 01:59:59 EDT
         Sun 2016-11-06 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
         Sun 2017-03-12 01:59:59 EST
         Sun 2017-03-12 03:00:00 EDT
#修改为东八区
[root@docker ~]# timedatectl set-timezone Asia/Shanghai
 Local time: Wed 2016-12-14 10:53:10 CST
 Universal time: Wed 2016-12-14 02:53:10 UTC
    RTC time: Wed 2016-12-14 02:53:10
    Time zone: Asia/Shanghai (CST, +0800)
   NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
   DST active: n/a
[root@docker ~]# date
Wed Dec 14 10:53:49 CST 2016
#调整时间
[root@docker ~]# date -s "2016-12-13 21:54:20"
#时间同步,不执行则无法生效
[root@docker ~]# clock -w
[root@docker ~]# timedatectl
   Local time: Tue 2016-12-13 22:59:44 CST
 Universal time: Tue 2016-12-13 14:59:44 UTC
    RTC time: Tue 2016-12-13 14:59:44
    Time zone: Asia/Shanghai (CST, +0800)
   NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
   DST active: n/a
```

至此宿主机时区及时间调整完毕。

3. 构建容器测试

根据上述dockerfile重新生成镜像,并使用RUN命令启动容器,查看当时窗口时间

/ # date
Tue Dec 13 23:01:18 CST 2016

已与宿主同步,整个调整过程结束~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索docker
, 容器时区
容器时间同步
docker 修改容器时区、docker 容器时区、docker 容器时间同步、docker 时区、docker 时区设置,以便于您获取更多的相关知识。

时间: 2024-12-05 19:04:55

解决Docker容器时区及时间不同步问题的方法_docker的相关文章

Docker 解决获取容器获取的时间不是本地时间的问题_docker

docker 获取容器获取的时间出错问题解决: 在使用Docker部署网站的时候,无意间发现容器里面的时间竟然是美国时间,被雷到了,不过解决办法也很简单,有两种办法 1.重新启动一个容器,加上如下参数,即可使用宿主机时间 $ -v /etc/localtime:/etc/localtime:ro # docker run -d -v /etc/localtime:/etc/localtime:ro [image] 2.假如,你不想重新启动,或者不能重新启动,也没关系,可以直接把文件复制到容器内,

如何解决Docker容器和宿主机时间同步问题

在使用了Docker以后,大家可能遇到的一个问题就是Docker容器的时间和宿主机时间不同步.造成这个问题的主要原因是宿主机设置了时区,而Docker容器并且设置,导致两者相差8小时. 接下来,我们通过在在宿主机和容器里分别执行date命令来看下实际的情况. 在宿主机执行date命令的结果:  进入到容器里,再执行date命令的结果: docker exec -it <containerid> /bin/sh date 执行后的结果为: 从截图来看,我们发现相差了8个小时.那么如何解决这个问

在Docker容器中不需要运行sshd的原因浅析_docker

当开始使用Docker时,人们经常问:"我该如何进入容器?",其他人会说"在你的容器里运行一个SSH服务器".但是,从这篇博文中你将会了解到你根本不需要运行SSHd守护进程来进入你的容器.当然,除非你的容器就是一个SSH服务器. 运行SSH服务器是很想当然的,因为它提供了进入容器的简便方式.在我们公司基本上每个人都最少使用过一次SSH.我们中有很大一部分人每天都会使用它,并且他们很熟悉公钥与私钥,无密码登录,密钥代理,甚至有时会使用端口转发和其他不常用的功能.正因如

通过nsenter连接docker容器

通常连接Docker容器并与其进行交互有四种方法.详情见:https://github.com/berresch/Docker-Enter-Demo,下面摘录nsenter连接的方式. 查看是否安装nsenter [root@localhost ~]# whereis nsenter nsenter: /usr/bin/nsenter /usr/share/man/man1/nsenter.1.gz 如果没安装可创建install.sh,并执行 #!/bin/bash curl https://

电脑时间不能同步,电脑时间同步出错的解决办法

电脑时间不能同步.电脑时间同步出错的解决步骤: (小窍门:将日期和时间调整为接近当前,将可以避免电脑时间不能同步或进行同步时出错的问题) (在开始下面的设置之前,小编建议将"自动与Internet时间服务器同步"下方的服务器更改为IP:210.72.145.44,这是中国国家授时站的IP地址,同步成功率为99%) 第一步:校准时区,鼠标双击任务栏右下角时间栏或右键单击时间选择"调整日期/时间"-->在弹出的 "日期和时间属性"窗口中选择&q

解决 Windows instance 时间不同步问题 - 每天5分钟玩转 OpenStack(153)

  这是 OpenStack 实施经验分享系列的第 3 篇. 问题描述 通过上一节部署出来的 Windows instance 有时候会发现操作系统时间总是慢 8 个小时,即使手工调整好时间和时区,下次 instance 重启后又会差 8 个小时. 原因 KVM 对 Linux 和 Windows 虚拟机在系统时间上处理有所不同,Windows 需要额外一些设置. 解决办法一 给 Windows 镜像添加 os_type 属性. glance image-update --property os

解决美国或国外VPS系统时间不能同步更新的问题

在一次客户反映国外VPS系统时间不能同步更新的问题后,想出了通过以下方法解决... win2003系统有一个DOS命令可以实现日期时间的更新同步: W32TM /resync 那么,这时我们设定一个计划任务,定时让它执行就可以了. 在C盘根目录建立一个time.bat文件,文件的内容就是W32TM /resync. 然后,在控制面板添加新的计划任务,设置定期执行这个批处理文件就可以解决了.

如何解决Ubuntu与Windows双系统时间不同步的问题

不知道有没朋友跟我一样是使用 Ubuntu 和 Windows 双系统?今天有朋友问到我,当他从 Ubuntu 系统重新启动到 Windows 时,会发现 Windows 中的时间变了,他问我有没办法修复?其实我刚开始使用 Ubuntu 和 Windows 双系统时就遇到这个问题.下面我们就来解决这个问题. 为什么Ubuntu和Windows双系统会有时间差 之所以 Windows 与 Ubuntu 双系统之间有时间差,是因为这两个系统使用了不同的方式来识别硬件时钟(Hardware Clock

如何解决Win7 64位系统下windowstime服务无法启动导致时间无法同步

  1.首先打开开始菜单中的运行对话框,然后输入w32tm /register,然后回车,正确的响应为:W32Time 成功注册; 另外,中国国家授时中心的时间服务器IP地址及时间同步方法: 大家都知道ghost win7系统的时间是由一块电池供电保持的,而且准确度比较差经常出现走时不准的时候.通过互联网络上发布的一些公用网络时间服务器NTPserver,就可以实现自动.定期的同步本机标准时间. 依靠win7系统系统默认的windows或NIST等境外的时间服务器同步时间,总存在着访问堵塞.时间