docker容器与宿主机时间同步

前言

在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,此时需要同步它们的时间,让容器时间跟宿主机时间保持一致。

一、分析时间不一致的原因

宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
此时,容器与宿主机之间采用的时区不一致,两个时区之间相隔8小时。

二、同步时间的方法

方案1:共享主机localtime

在创建容器的时候指定启动参数,挂载宿主机的localtime文件到容器内,以此来保证宿主机和容器的时区一致。
docker run --volume /etc/localtime:/etc/localtime:ro

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \ 
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

方案2:复制宿主机localtime到容器中

1、检查宿主机时间和docker容器时间:

//查看容器id
docker ps
//检查时间使用:date
date
//进入容器:
 docker exec -it  {容器名称或者容器id}  /bin/bash
 //查看时间
 date

2、进入docker容器创建复制时间的文件夹

//进入容器:
 docker exec -it  {容器名称或者容器id}  /bin/bash
 //创建文件夹
 mkdir -p /usr/share/zoneinfo/Asia
 mkdir -p /usr/share/zoneinfo/Pacific
 //退出
 exit;

3、从宿主机拷贝文件到docker容器

docker cp /etc/localtime {容器id}:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai {容器id}:/etc/localtime

4、进入docker容器检查时间

//进入容器:
 docker exec -it  {容器名称或者容器id}  /bin/bash
 //查看时间
 date

方案3:在创建dockerfile时自定义镜像的时间格式与时区

在dockerfile创建初期增加一行内容,内容规定了该镜像的时间格式以及时区。

#设置时区

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

总结:通过以上三种方案均可实现docker容器的时间与宿主机时间同步,具体选择哪个方案根据实际情况而定。

我这里采用了第二种
docker容器与宿主机时间同步_第1张图片

你可能感兴趣的:(大数据之数据仓库,docker,容器,运维)