前言
在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,此时需要同步它们的时间,让容器时间跟宿主机时间保持一致。
一、分析时间不一致的原因
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
此时,容器与宿主机之间采用的时区不一致,两个时区之间相隔8小时。
二、同步时间的方法
方案1:共享主机localtime
在创建容器的时候指定启动参数,挂载宿主机的localtime文件到容器内,以此来保证宿主机和容器的时区一致。
docker run --volume /etc/localtime:/etc/localtime:ro <image_name>
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/Asiamkdir -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容器的时间与宿主机时间同步,具体选择哪个方案根据实际情况而定。
我这里采用了第二种