由于在一个主机上使用多个容器,且容器自带的时间好像不太统一,导致我网页前端看到的时间总是差8小时。主要是容器内的时间和时区信息不统一。

原理:容器找时间的依据
读取linux系统时间步骤:

1.先找“TZ”变量,没有,到2,
2.读/etc/timezone,没有到3,
3.比较/etc/localtime文件与"/usr/share/zoneinfo目录下所有时区文件,如果有一致的,就为该时区,如果没有,到4,
4.默认为标准GMT

我的容器都没有TZ变量,所以就在2,3之间出现问题,我复制了localtime到容易,但是容器可能有默认的timezone,导致容器用了国际时。
解决办法比较容易,把2,3两个时间都覆盖一下。
如果使用Dockerfile

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

如果使用docker启动命令行,请多带两条参数

-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-v /etc/timezone:/etc/timezone \

因为我的容器有的没写Dockerfile,所以我统一屏蔽了Dockerfile里面的复制,只使用了docker的启动参数形式。

Last modification:September 9, 2021
送杯咖啡,做个交流,谢谢!