docker容器改变时区

    默认情况下的docker容器启动之后,系统时间是UTC时间,这导致和我们的北京时间相差8小时,会引出很多问题。

    有一些容器是和项目一起构建的,我们可以在构建的时候,将系统时区修改为Asia/Shanghai。如下所示,我们在定义Dockerfile的时候,可以直接加上这段指令:

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

    这样的话,容器构建之后,再启动,就不会有时差问题了。

    有时候,我们的容器是三方提供的,比如elasticsearch服务,mysql服务,mongodb服务等等。可能有的镜像在制作的时候,考虑了时差问题,但是大多数可能并不会考虑。这就需要我们设置时区了,当然,不可能在容器启动之后去设置,这样可以改变系统时间,但是如果服务随着容器启动,服务的时间并不会随着系统时间改变而发生变化。所以,我们改变系统时区就应该在服务启动之前,或者在容器启动时指定。

    改变时区,主要是改变/etc/localtime这个文件。

    确保docker host主机的时间是准确的,可以考虑直接挂载/etc/localtime到宿主机的/etc/localtime,所以我们看到很多这样的设置:

    如果是docker run启动容器,那么会指定-v /etc/localtime:/etc/localtime;

    如果是docker-compose编排容器,那么会指定:

volumes:
  - /etc/localtime:/etc/localtime

   当然,通过这种方式肯定是可以确保时区一致的问题。另外,我根据一些资料,发现可以通过指定环境变量TZ="Asia/Shanghai"的方式来修改时区,比如elasticsearch服务就可以生效。但是busybox就怎么都不生效,只有通过改变/etc/localtime才行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值