docker中时区问题的处理方法

 更新时间:2019年09月22日 11:13:53   作者:云平台运维开发  
这篇文章主要给大家介绍了关于docker中时区问题的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

背景

这两天在打docker的时候,发现自己的容器启动之后,里面date -R的输出时区是UTC,总是和北京时间差了8个小时.


标准镜像


时区是UTC

查看/etc/localtime,发现默认指向的是Etc/UTC时区.而且TZ环境变量也没有被设置.


linux中的时区问题到底是怎么处理的

实际上,我们所有关于时区处理的问题都是glibc中处理时区的问题. 这个问题最权威的文档就是glibc的官方文档,里面关于TZ环境变量的描述介绍了时区问题的处理.

https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html#TZ-Variable

其中和我们相关的部分如下.

核心意思如下: 在glibc中,TZ环境变量的值是一个文件的名字,这个文件的内容描述了时区相关的信息.

如果TZ这个环境变量没有设置,那么系统会选择一个默认值,在glibc中,其默认值为/etc/localtime. 如果TZ环境变量有值,并且这个值是以/开头的,那么是一个绝对路径的文件名,否则文件名为/usr/share/zoneinfo/$TZ. /usr/share/zoneinfo目录下面有世界各地的本地时间信息,比如Asia/Shanghai.一般这个目录下面的文件是被tzdata这个包安装的.

按照这个思路,我们强制指定TZ环境变量为Asia/Shanghai,时区正确


强制修改/etc/localtime文件,时区也正确.

docker容器处理时区的方法

根据上面的描述,在docker容器中设置时区其实有两个主要的方法. 一个是直接进行TZ环境变量设置,另一个是不设置TZ环境变量,直接修改/etc/localtime的内容(通过软链接或者文件直接复制都可以)

这里以设置TZ环境变量为例(我自己比较喜欢这样做,感觉比修改/etc/localtime更方便).

首先,我们可以在Dockerfile里面添加ENV TZ=Asia/Shanghai,这样docker build出来的镜像默认TZ环境变量就是我们要的值了.


其次,我们也可以在容器拉起的时候使用-e TZ=Asia/Shanghai进行TZ环境变量设置,这个设置就是动态的,同一个镜像我们可以在拉起的时候设置不同的值.


总结

docker中的时区处理实际上就是glibc中的时区处理,了解了glibc中对事情的处理方法,核心是TZ环境变量和/etc/localtime文件,docker中的时期问题处理就简单了.

相关文章

  • seata docker 高可用部署的详细介绍

    seata docker 高可用部署的详细介绍

    这篇文章主要介绍了seata docker 高可用部署的相关知识,通过相关配置文件实现高可用需要依赖注册中心,配置中心,数据库,需要的朋友可以参考下
    2021-07-07
  • SpringCloud与Docker的集成原理解析

    SpringCloud与Docker的集成原理解析

    Docker的核心原理是通过将应用程序及其所有依赖项封装到独立的容器中,实现了跨平台、一致性和可移植性,这篇文章主要介绍了SpringCloud-Docker原理解析,需要的朋友可以参考下
    2024-02-02
  • Docker安装Keycloak开源身份认证服务的图文教程

    Docker安装Keycloak开源身份认证服务的图文教程

    Keycloak是一款开源的认证授权平台,本文就来介绍一下Docker安装Keycloak开源身份认证服务的图文教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 关于docker安装python3.8镜像的问题

    关于docker安装python3.8镜像的问题

    这篇文章主要介绍了docker安装python3.8镜像的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Docker容器的导入导出操作教程

    Docker容器的导入导出操作教程

    这篇文章主要给大家介绍了关于Docker容器的导入导出操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Docker启动镜像就自动退出问题及解决

    Docker启动镜像就自动退出问题及解决

    这篇文章主要介绍了Docker启动镜像就自动退出问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Docker使用Dockerfile来创建镜像

    Docker使用Dockerfile来创建镜像

    本篇文章主要介绍了Docker使用Dockerfile来创建镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Docker 架构简介

    Docker 架构简介

    这篇文章主要介绍了Docker 架构的相关资料,文中讲解非常细致,帮助大家开始学习docker,感兴趣的朋友可以了解下
    2020-07-07
  • 如何在一台服务器上使用docker运行kafka集群

    如何在一台服务器上使用docker运行kafka集群

    文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本、进入容器检查、故障排查以及启动生产者和消费者等步骤,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • docker中的jenkins配置sonarQube的过程

    docker中的jenkins配置sonarQube的过程

    SonarQube是一个开源的代码分析平台,用来持续分析和评测项目源代码的质量,通过SonarQube可以检测出项目中重复代码,潜在bug, 代码规范,安全性漏洞等问题,并通过SonarQube web UI展示出来,这篇文章主要介绍了docker中的jenkins配置sonarQube,需要的朋友可以参考下
    2023-08-08

最新评论