大部分的容器在制作的时候,时间都是UTC时间(又是格林威治标准时间GMT),所以我们在使用的时候,容器内部时间都是和北京时间相差8小时。
如何设定docker容器时间的3种方法,我们以alpine来举例,在举例之前,需要参考这篇文章《如何对alpine设置时区为Asia/Shanghai》,将alpine的时区功能补全,否则下面的举例不会起效:
1,容器启动后,进入容器内:
docker exec -it xxxx /bin/sh
然后执行下面的语句:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
最后看一下时间,看到已经改成正确的:
date
这种方法在容器重启后时间又会回到UTC,所以只有在紧急的情况下才能用一下,这种方法是最不靠谱的。
2,自己做一个以alpine为基础的镜像,增加时区功能,Dockfile如下:
FROM alpine
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai
这种方法的缺点很明显,大部分的镜像都是UTC时间,难道需要每个都做一个自己的镜像?所以这种方法往往用在制作自己应用的镜像时候。
为什么要安装tzdata这个包,见下面的参考资料《Linux – 时区和时间调整方法》,讲得很好。
3,启动容器时,加入环境变量,比如:
docer run -e TZ=Asia/Shanghai --rm myalpine date
这3种方法中,以这种方法最好最灵活。