项目中使用docker-compose,并通过以下方式设置了时区
environment:
- SET_CONTAINER_TIMEZONE=true
- CONTAINER_TIMEZONE=Asia/Shanghai
但是并没有正确生效,网上有很多博客都在推荐这个做法,另外一种是使用标准环境标量
-TZ=Asia/Shangehai
我对此产生了疑问为什么,标准第二种方式可以但是第一种却不行,且大家并未对此产生怀疑,还有另外一种方式 就是在Dockerfile 构建镜像的时候 使用RUN 向 /etc/timezone 中写入具体时区,比如下面这样,代码引用自另外一篇博文 出处
FROM docker.io/centos
MAINTAINER DAVID
# 使用RUN命令设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai'>/etc/timezone
根据信息显示,我直接搜索了SET_CONTAINER_TIMEZONE,弹出的第一篇文章是 Ivan Krizsan
写的 Time in docker containers,当中就解释了,这个SET_CONTAINER_TIMEZONE 环境变量是为了方便share image的时候,便于其他用户修改时区而设置的,原文如下
可以明确的看到 需要手动将环境变量读取出来,并进行设置。seo 第一,不代表就是SET_CONTAINER_TIMEZONE的出处,所以利用时间工具,验证了docker 出品时间2013年到2015年期间所有的搜搜记录,仅仅两条,https://www.ivankrizsan.se/2015/10/31/time-in-docker-containers/ 所以实际上这个变量是一个社区规范可能,并没有在产品实现上进行约束或者规定。疑问到此解开
补充额外的时区设置方案,即将 宿主主机的/etc/localtime /etc/timezone 共享给容器,也可以令运行的容器的时区改变