今天在系统集成测试时由测试人员提交了一个测试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 -- :: EST
Universal time: Wed -- :: UTC
RTC time: Wed -- ::
Time zone: America/New_York (EST, -) //默认为西五区
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: no
Last DST change: DST ended at
Sun -- :: EDT
Sun -- :: EST
Next DST change: DST begins (the clock jumps one hour forward) at
Sun -- :: EST
Sun -- :: EDT
#修改为东八区
[root@docker ~]# timedatectl set-timezone Asia/Shanghai
Local time: Wed -- :: CST
Universal time: Wed -- :: UTC
RTC time: Wed -- ::
Time zone: Asia/Shanghai (CST, +)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@docker ~]# date
Wed Dec :: CST
#调整时间
[root@docker ~]# date -s "2016-12-13 21:54:20"
#时间同步,不执行则无法生效
[root@docker ~]# clock -w
[root@docker ~]# timedatectl
Local time: Tue -- :: CST
Universal time: Tue -- :: UTC
RTC time: Tue -- ::
Time zone: Asia/Shanghai (CST, +)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
```
 
至此宿主机时区及时间调整完毕。

3. 构建容器测试

根据上述dockerfile重新生成镜像,并使用RUN命令启动容器,查看当时窗口时间
/ # date
Tue Dec :: CST
已与宿主同步,整个调整过程结束~~

解决Docker容器时区及时间不同步问题的更多相关文章

  1. 解决Docker容器时区及时间不同步的问题

    前几天在测试应用的功能时,发现存入数据库中的数据create_time或者update_time字段总是错误,其他数据都是正常的,只有关于时间的字段是错误的. 进入linux服务器中查看,也没有任何的 ...

  2. 解决Docker容器时区不一致的问题

    查看linux系统时区和docker容器时区 date -R //查看linux主机时间和时区 date exec [container] date -R // 查看容器时间和时区 2者的时间差了8个 ...

  3. docker容器时区问题

    原文:docker容器时区问题 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/article/details/80890868 本系列目录 ...

  4. 解决docker容器中Centos7系统的中文乱码

    解决docker容器中Centos7系统的中文乱码问题有如下两种方案: 第一种只能临时解决中文乱码: 在命令行中执行如下命令: # localedef -i zh_CN -f UTF-8 zh_CN. ...

  5. 解决docker容器的窗口大小问题

    解决docker容器的窗口大小问题 最近哥们在是使用docker时,发现有些容器内部窗口大小有问题. 如下午所示,vi窗口只占据左上角一部分.正常情况下vi应该铺满整个窗口才对呀. 所以哥们找到了解决 ...

  6. [转]解决Docker容器时间与主机不一致问题

    原文: https://blog.csdn.net/luckystar689/article/details/76572046 https://stackoverflow.com/questions/ ...

  7. Docker:容器与主机时间不同步问题解决

    在Docker容器运行后,可能会发现容器时间与宿主机时间不一致,一般会差8个小时.这样会造成在容器中运行的web程序打出的日志时间与实际时间不一致,如果web程序中有定时任务也会造成影响等,需要对宿主 ...

  8. 解决docker容器中文乱码,修改docker容器编码格式

    前台上传文件到服务器后,服务器返回给前台的文件列表中出现中文乱码,所有的中文文件名全部变成?,英文文件名则正常显示. 问题经过定位,发现后台代码的multipartfile类在执行transterto ...

  9. centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied

    docker运行一个容器后,将主机中当前目录下的文件夹挂载到容器的文件夹后 进入到docker容器内对应的挂载目录中,运行命令ls后提示: ls: cannot open directory .: P ...

随机推荐

  1. Repeater 控件

    Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功能,这意味着用户必须通过创建模板来提供 Repeater 控件的布局.当网页 ...

  2. 使用VS Code开发 调试.NET Core 应用程序

    使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发及调试. https://github.com/aspnet/ ...

  3. C# 项目提交过程中感受

    C# 项目提交过程中感受 新到一家互联网公司,昨天第一次提交代码,遇到了不少问题,而且大多数是代码格式问题,特此将范的错误记录下来,自我警示. 1. 代码对齐,这个虽然一直也都在注意,不过还是有一行代 ...

  4. ibatis 和 mybatis

    ibatis 在daoImpl 层 继承 SqlMapClientDaoSupport  实现 dao 层的接口. this.getSqlMapClientTemplate().queryForObj ...

  5. HTML字符实体(关于 ><等)

    常用字符实体 注意:实体名称是区分大小写的! 结果 描述 实体名 实体编号    non-breaking space     < less than < < > greate ...

  6. 前端弹出对话框 js实现 ajax交互

    原本计划实现这样一个需求: 前台点击触发某业务动作,需要用户补充信息,不做跳转页面,弹窗的形式进行补充信息. 折腾出来了,但是最终没有用到. 代码还有些毛躁,提供大概实现逻辑. 实现思路: 在窗口铺上 ...

  7. jquery-懒加载技术(简称lazyload)

    第一:lazyLoad简介及作用 网站性能优化的插件,提高用户体验. 页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片 ...

  8. Sanboxie 5.14安装图解

    Sanboxie, 即沙盘,引用官方解释:电脑就像一张纸,程序的运行与改动,就像将字写在纸上.而Sandboxie就相当于在纸上放了块玻璃,程序的运行与改动就像写在了那块玻璃上,除去玻璃,纸上还是一点 ...

  9. SharePoint 2013 Word 转换PDF服务介绍及示例

    前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...

  10. 了解HTML CSS格式化排版 文字排版

    这里简单的写一些涉及到字体排版中常用到的属性, 大家可以学习查看, 也可以mark下以后看. font-family: "Micrsoft Yahei"; 设置字体 font-si ...