Docker踩坑日记之修改容器时区

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 21:02   4199   0

想必刚接触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里可以这样操作。

推荐最后一种,一行永逸~

不足之处,多多指教,谢谢大家~

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP