Docker中的时区问题处理

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

作者:云平台运维开发来源:今日头条|2019-09-20 08:47
ENV TZ=Asia/Shanghai

之前也遇到了 感谢原作者提供的思路. 

背景

这两天在打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中的时期问题处理就简单了.

最新文章

  1. SpringSecurity操作指南-基于Spring、SpringMVC和MyBatis自定义SpringSecurity权限认证规则
  2. BZOJ 1191 超级英雄 Hero 题解
  3. [LintCode] Ugly Number 丑陋数
  4. (转载)新手如何正确理解GitHub中“PR(pull request)”中的意思
  5. Web程序员开发App系列 - 认识HBuilder
  6. Android Studio 快捷键 主键
  7. MyEclipse8.5集成Tomcat7时的启动错误:Exception in thread “main” java.lang.NoClassDefFoundError org/apache/commons/logging/LogFactory
  8. linux管道的容量和内部组织方式
  9. xml 与 DataSet 互相转换
  10. SQL查询今天、昨天、7天内、30天
  11. 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
  12. angularJS+requireJS实现controller及directive的按需加载
  13. BloomFilter算法
  14. win10 uwp clone
  15. 《java入门第一季》之类(Scanner类)
  16. Android学习之基础知识七—碎片的使用
  17. html5和css3实现的3D滚动特效
  18. STL 源代码剖析 算法 stl_algo.h -- search_n
  19. 通过Spring使用远程访问和web服务
  20. javascript中提高代码的封装性

热门文章

  1. [luogu] 斐波那契数列
  2. linux查看系统启动时间
  3. 新路由3newifi3路由器刷机newifi3breed解锁小白刷机教程路由器刷breed老毛子Padavan固件
  4. 扩展kmp学习笔记
  5. python 列表 【基本使用功能】
  6. 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
  7. TCP数据报结构以及三次握手
  8. 拼图游戏(8 puzzle)
  9. C语言中的指针笔记
  10. Debian/Ubuntu/CentOS开机启动