17.Docker 容器时间与宿主机同步

本文详细介绍了在Docker容器中遇到时间不一致问题的原因,以及如何通过在`docker run`命令中添加参数或者修改`Dockerfile`来实现容器与宿主机时间同步。同时,还提供了解决正在运行的容器时间不同步的方法,即通过`docker cp`命令同步`/etc/localtime`。
摘要由CSDN通过智能技术生成

Docker容器时间与宿主机同步

BY 赫墨拉 · PUBLISHED 2018年7月10日 · UPDATED 2019年6月10日

问题描述:

在我们平时使用docker,运行我们的应用的时候,访问应用页面的时间与现在相差8个小时

无法结合时间点去判断当时服务的异常

同样,当我们在docker上运行某些服务时,需要时间与宿主机同步,否则会发生异常

原因:

宿主机设置了时区,而Docker容器并没有设置,导致两者相差8小时

解决办法:

为了保证容器和宿主机之间的时间同步:

可以使用以下几种办法:

1.Docker run

使用docker run运行容器时,添加如下参数

-v /etc/localtime:/etc/localtime:ro

验证:

[root@uat-app01 ~]# date #当前宿主机时间 Tue Jul 10 11:18:41 CST 2018 [root@uat-app01 ~]# docker run -it -v /etc/localtime:/etc/localtime:ro centos #运行docker,添加我们的参数 [root@df22a5da9c77 /]# date    #当前容器时间 Tue Jul 10 11:18:47 CST 2018

2.DockerFile

在Docker File中添加如下参数:

将时区配置添加到环境变量,并使用软连接,并将时区配置文件覆盖

ENV TimeZone=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone

实例DockerFile如下:

FROM centos # Centos 基础镜像 MAINTAINER louisvv<648555416@qq.com> ENV TimeZone=Asia/Shanghai    #添加时区环境变量,亚洲,上海 RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone #使用软连接,并且将时区配置覆盖/etc/timezone

构建镜像

docker build -t centos:time .

验证:

[root@uat-app01 ~]# date #当前宿主机时间 Tue Jul 10 11:08:39 CST 2018 [root@uat-app01 ~]# docker run -it centos:time /bin/bash #启动刚构建的 centos:time 镜像 [root@f35e963f9e8b /]# date #容器时间 Tue Jul 10 11:08:44 CST 2018


正在运行的容器,时间如何同步?

有些同学看到这里,不禁会问,如果是一个正在运行的docker容器,如何同步时间呢?

这种方式同样适用于,构造镜像完成后,时间不同步的状况

在宿主机执行命令如下:

docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器名】:/etc/localtime

验证:

当前宿主机时间如下:

[root@uat-app01 ~]# date Tue Jul 10 11:27:01 CST 2018

启动一个docker容器

[root@uat-app01 ~]# docker run -itd centos fe51fba60df5c2425991aab0922c7318d2c3cf2c27b817632765ed24e7486ce6

进入该容器查看时间,发现与现在相差8个小时,退出exec

[root@uat-app01 ~]# docker exec -it fe51 /bin/bash [root@fe51fba60df5 /]# date Tue Jul 10 03:27:11 UTC 2018 [root@fe51fba60df5 /]# exit exit

在宿主机,执行我们提供的命令,将容器名改为对应的即可

[root@uat-app01 ~]# docker cp -L /usr/share/zoneinfo/Asia/Shanghai fe51:/etc/localtime

再次进入容器查看时间,发现时间同步过来了

[root@uat-app01 ~]# docker exec -it fe51 /bin/bash [root@fe51fba60df5 /]# date Tue Jul 10 11:27:17 CST 2018

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿迪是否

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值