Docker 解决容器时间与主机时间不一致的问题三种解决方案

Docker容器时间与主机时间不一致

通过date命令查看时间

查看主机时间

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

查看容器时间

root@b43340ecf5ef:/#date
Wed Jul 27 14:43:31 UTC 2016

可以发现,他们相隔了8小时。

CST应该是指(China Shanghai Time,东八区时间)
UTC应该是指(Coordinated Universal Time,标准时间)

所以,这2个时间实际上应该相差8个小时。(bluer: 所以没有设置过的容器, 一般跟宿主机时间相差8h)

所以,必须统一两者的时区。

共享主机的localtime  (方法一)

创建容器的时候指定启动参数,挂载localtime文件到容器内  ,保证两者所采用的时区是一致的。

docker run --name <name> -v /etc/localtime:/etc/localtime:ro .... 

复制主机的localtime  (方法二)

docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime

在完成后,再通过date命令进行查看当前时间。

但是,在容器中运行的程序的时间不一定能更新过来,比如在容器运行的MySQL服务,在更新时间后,通过sql查看MySQL的时间

select now() from dual;

可以发现,时间并没有更改过来。

这时候必须要重启mysql服务或者重启Docker容器,mysql才能读取到更改过后的时间。

创建自定义的dockerfile  (方法三)

创建dockerfile文件,其实没有什么内容,就是自定义了该镜像的时间格式及时区。

FROM redis

FROM tomcat

ENV CATALINA_HOME /usr/local/tomcat

#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo 'Asia/Shanghai' >/etc/timezone \

保存后,利用docker build命令生成镜像使用即可。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法

    Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法 发生现象: ubuntu15下,安装完Docker后,运行docker images 报错Cannot connect to the Docker daemon. Is the docker daemon running on this host? 如下图 图 原因分析: 目前我遇到这个问题是两个原因造成的,一个

  • 在windows下的安装Docker的教程

    非官方备注:你的CPU一定要支持VT才可以,笔者的笔记本T6400不支持VT是装不上的,所以一定要支持VT,好在笔者的MAC很OK,公司电脑也给力,如果在win7系统安装需要是64的系统. 上一节我们介绍了在ubuntu和centos下的安装,当然都是基于64位系统的,在学习过程中,你可能没有这些东西,当然你可以用virtualbox或者Vmware虚拟化出来,今天我们介绍的是官网给我们提供的using vagrant! 介绍 Docker可以用虚拟主机技术运行在Windows上像virtual

  • 详解修改docker时区及docker常用命令

    前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

  • Docker Windows下如何安装详细介绍(图文)

    Docker Windows 介绍及安装 前言: 放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引入了Docker. Docker溯源 Docker的前身是名为dotCloud的小公司,主要提供的是基于 PaaS(Platform as a Service,平台及服务)平台为开发者或开发商提供技术服务,并提供的开发工具和技术框架.因为其为初创的公

  • Docker for windows pull镜像文件的安装位置改变的方法

    Docker for windows pull镜像文件的安装位置改变的方法 发生现象: 在windows10下安装Docker for windows,随着用docker pull image文件后,C盘的容量越来越小了,你可能也有一种跟我一样的想法,想改变默认的安装路径,本文希望能解决你的问题. 原因分析: windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个Linux虚拟机,你执行的所有命令其实都是在这个虚拟机里执行的,所以所有pull到本地

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

    今天在系统集成测试时由测试人员提交了一个测试bug,原因是提交业务数据时间与实际时间(北京时间)有偏差,导致统计异常.由于我们集成测试是向测试人员直接提供完整的Docker镜像作为测试环境,原因应该是出在容器时间设置上. 拿到交付的docker镜像后,启动后进入容器控制台,使用date命令查看果然时间不正确.再查看宿主机时间是正确,这样肯定是容器启动时未将时区与宿主机保持同步了,由于测试镜像是由dockfile直接构建,因此问题基本了定准在dockerfile文件上了. 打开dockerfile

  • 在Windows系统下安装docker窗口的配置过程

    前言 目前对docker支持最好的是Ubuntu系统,docker不支持在windows上运行,必须借助docker-machine.docker提供了toolbox用于在windows和mac平台安装docker. 工具箱包括: docker machine Docker Engine Kitematic docker命令行运行环境 Oracle VM VirtualBox 安装之前需要检查BIOS中虚拟化的设置是否已打开,参考此页面 1.下载安装文件 https://www.docker.c

  • Mac系统上用Docker搭建lamp环境

    前言 docker终于出来mac版本了,赶紧去下载,安装步骤,以前没有Mac版本的时候还要装docker toolbox,现在直接下载安装就好了. 安装好了的样子 状态栏 docker的提示 这个时候就可以到终端里面输入docker命令 $ docker --version Docker version 1.13.0-rc3, build 4d92237 $ docker-compose --version docker-compose version 1.9.0, build 2585387

  • Docker 解决容器时间与主机时间不一致的问题三种解决方案

    Docker容器时间与主机时间不一致 通过date命令查看时间 查看主机时间 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时间 root@b43340ecf5ef:/#date Wed Jul 27 14:43:31 UTC 2016 可以发现,他们相隔了8小时. CST应该是指(China Shanghai Time,东八区时间) UTC应该是指(Coordinated Universal Time,标准时间) 所以,

  • Json返回时间的格式中出现乱码问题的两种解决方案

    前言:这段时间一直没有写博客,首先是我正在实现权限系列的绝色和操作的实现,因为这些东西在前面我们都已经说过了,所以我们就不重复的说这些了,那么我们知道,在我们使用Json返回数据的时候时间的格式一般都会变了,变成我们不认识的一些字符,那么当我们遇到这些问题的时候我们该怎么解决呢,今天我就来小说一下这个的解决方法. .发现问题 (1).正如我们在前言里面所说,我们在编写Json解析时间的时候会返回一些莫名其妙的东西,那么我们是如何解决这个问题的呢?我现在有两种方法可以解决这个问题,下面我们首先来说

  • 解决docker中mysql时间与系统时间不一致问题

    最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时. linux服务器时间: 进入mysql,输入date如下 发现两者时区不同.因为mysql容器是在docker中安装的,所以mysql的时间不对应该是宿主docker导致的. 查询资料发现,docker的默认时区是0区,其实这会对安装的容器造成不少麻烦,比如执行日志的记录不准确等. 有如下两种方式解决: 方法一:复制主机的localtime docker cp /etc/localtime [容器ID或者NAME]:/e

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

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

  • docker中mysql时间与系统时间不一致问题

    最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时. linux服务器时间: 进入mysql,输入date如下 发现两者时区不同.因为mysql容器是在docker中安装的,所以mysql的时间不对应该是宿主docker导致的. 查询资料发现,docker的默认时区是0区,其实这会对安装的容器造成不少麻烦,比如执行日志的记录不准确等. 有如下两种方式解决: 方法一:复制主机的localtime docker cp /etc/localtime [容器ID或者NAME]:/e

  • 解决VMWare 虚拟机centos 时间与本地时间不一致的问题

    VM Ware 虚拟机centos 时间与本地时间不一致,如下图.大致是时区设置的问题,设置为中国标准时区即可,CST. 解决办法 1.安装时间同步插件 ntpdate yum install ntpdate 2.启动服务 service ntpdate restart 或 systemctl restart ntpdate 3.设置时区 1). 删除本地时间(美国时间):rm -rf /etc/localtime 2). 设置时区为上海:ln -s /usr/share/zoneinfo/As

  • docker容器访问宿主机的MySQL操作

    背景: 有一个flask项目提供接口,使用docker容器构建并且运行,MySQL在宿主机运行,需要在容器中可以让flask连接上宿主机的mysql 使用ifconfig命令可以看到,有一个docker0和eth0,在docker容器中可以通过eth0的IP地址加上端口号(3306)这样就可以连接上宿主机的MySQL了:另外,nginx可以通过docker0的IP地址加上构建容器时指定的端口号进行访问容器. 补充:docker的mysql容器运行正常,但是宿主机却连不上数据库,解决方法来啦 do

  • PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法

    问题: php函数date("Y-n-d   H-i-s");   输出的时间与当地时间相差8个小时. 解决思路 北京时间是东8区,可能是时区问题.但是此前都没问题啊,经过google发现原来从php5.1.0开始,php.ini里加入了 date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和我们的时间(北京时间)差了正好8个小时. 在调用date()函数之前先设定时区. 方法一:date_default_timezon

  • 如何解决win10与Ubuntu16.04时间不同步的问题的方法

    最近装了windows10和ubuntu16.04双系统,装完后,出现了win10跟Ubuntu 16.04时间不对的问题,在windows下时区不对,之前的老办法是使用编辑器打开: sudo gedit /etc/default/rcS 把其中的utc=yes 改成utc=no 然而并没有什么效果,ubuntu16.04里面根本就没有utc这一项! 后来谷歌了半天找到了一个完美解决办法: 先在ubuntu下更新一下时间,确保时间无误: sudo apt-get install ntpdate

  • docker容器挂载宿主主机目录的操作方法

    有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了 比如在2中,我们要发布一个war包,是通过 sudo docker cp demo.war tomcat_xiao:/usr/local/tomcat/webapps 来发布的,有没有更快捷的方式呢? 肯定有, 没有 我就不会在这里写这些玩意儿了 sudo docker run -p 8822:8080 --name tomcat_xiao_volume -v /ho

随机推荐