容器与主机的时间
我们在部署完docker之后往往会发现,容器的时间和主机的时间其实是对不上的,因为宿主机设置了时区,而Docker容器并没有设置,导致Docker容器的时间和宿主机时间不同步,导致两者相差8小时。我们可以进入容器使用date命令就可以看到容器里的时间了,在宿主机中也可以使用该命令进行查看。
由于这里我已经将时间进行了同步,所以我这的时间是正确的同步的,将容器和主机的时间进行同步也是很简单,这里我给大家介绍几种方法。
1.直接用命令挂载这个两个目录,启动时映射
docker run -it -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime --name 容器名 镜像名
2.复制时区信息到容器
docker cp /etc/localtime [容器ID或名字]:/etc/localtime
docker cp /usr/share/zoneinfo/Asia/Shanghai [容器ID或名字]:/etc/localtime
3.在已经创建好容器之后,进入容器进行指定时区
docker exec -it 容器名/ID /bin/bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4.Dockerfile直接执行
# Centos
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone;
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5.还有一种方法,我们直接cd到/usr/share/zoneinfo/Asia进行修改
cd /usr/share/zoneinfo/Asia
cp -i Shanghai /etc/localtime
无论什么方法但是本质都是去更改/etc/localtime中的时区。
可是当我们处理完容器时间之后,我们发现docker日志的时间却是依旧没有进行改变。也就是说docker日志的时间依旧是不正确的。
docker日志时间
这里我先进行了一次请求,然后通过docker logs -tf 容器名
查看日志
可以看到,日志时间和系统时间相差了8个小时。可是明明我们已经校准了容器的时间了,所有在我的不懈努力下终于找到了有关这个问题的博客。
这个是docker论坛中对其的相关讨论链接,结论是目前是无法进行更改的
这个是github上的相关讨论链接
这个是github相关讨论提交的pr的链接。目前这个pr已经被关闭了。
那应该怎么办呢,我找到的方法就是使用脚本。
这是脚本的github地址,安装也是非常方便,只需复制其readme.md文件中的代码命令即可。linux系统直接使用下面的命令即可。
wget -O /usr/local/bin/docker-logs-localtime https://raw.githubusercontent.com/HuangYingNing/docker-logs-localtime/master/docker-logs-localtime && chmod +x /usr/local/bin/docker-logs-localtime
详细的也可以看他github。使用方法也很简单。以我为例:
docker logs -t python-recognition | docker-logs-localtime
即可改正时间。
可以看到这时我们的时间就是正常的,也就是说他自动帮我们加上了8小时。下面是没有使用命令docker logs -tf python-recognition
的执行结果。进行对比。