想必刚接触Docker的同学直接run各种容器玩耍,或许直接投入使用,久而久之,就会发现数据库的时间与我们现在时间整整差8个小时。为什么会差8个小时,因为官方容器默认是UTF时区,我们这里是差8个时区,也就是UTF8。
如何修改
修改应用或者数据库时间(不推荐,治标不治本,直接省略)
容器内修改 (不推荐,重启容器就无效,直接省略)
Run阶段挂载宿主机localtime
docker run -d -v /etc/localtime:/etc/localtime java
这种方式可以解决重启而不丢失时区问题,但是暴露多了一个挂载点,而且每次run都要记得加上这个。思考着能不能在镜像上解决,答案是可以的。
Dockfile添加时区
RUN echo "Asia/Shanghai" > /etc/timezone \
&& dpkg-reconfigure -f noninteractive tzdata
这种方式就不用多一个挂载点,在容器内修改。但是但是,也是有问题的。有一些基础镜像是创建不了的,比如官方mysql镜像。
Dockerfile定义环境变量
ENV TZ=Asia/Shanghai
究极终结版,可以规避上面所有问题。在Dockfile添加一个时区的环境变量,每次启动容器就会读取,改变失去,非常炫酷。
services:
nginx:
build: .
environment:
TZ: Asia/Shanghai
在DockerCompose里可以这样操作。
推荐最后一种,一行永逸~
不足之处,多多指教,谢谢大家~
|