[转帖]Docker中的时区问题处理
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中的时期问题处理就简单了.
[转帖]Docker中的时区问题处理的更多相关文章
- 滚动 docker 中的 nginx 日志
Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...
- 在 Docker 中使用 mysql 的一些技巧
启动到后台: docker-compose start docker-composer 执行命令: entrypoint: pwd app: build: ./app working_dir: /a ...
- 主机、Docker时间与时区设置总结
最近在使用Docker容器时,部署java程序发现时间输出不对,在修改问题时总结如下. #date [-R] #查看主机时间 #timedatectl #查看主机时区 #tzselect ...
- docker容器修改时区(java应用log信息与标准容器时间有八个小时时间差)
在docker容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时时间差- 因为docker容器的原生时区为0时区,为了和国内时区保持一致,需要把容器时区调为东八 ...
- 在docker中运行jenkins实现代码自动发布到测试服务器
在docker中运行jenkins 用的镜像是apline版:lts-alpine,并设置正确的时区. docker run --name jenkins_master -d \ -p 8081:80 ...
- 同步docker中的容器时间和宿主机相同
同步docker中的容器时间和宿主机相同.cd /etc/ 在容器中修改下/etc/localtime文件的名称,避免冲突. mv localtime localtime_bak cp /usr/sh ...
- [golang]在Go中处理时区
许多新手开发人员在处理时区时感到困惑. 如何将它们存储在数据库中 如何在Go中解析它们 当将时区存储在数据库中时,请始终遵循一个标准时区,理想的做法是保存UTC时间,并在显示时区时根据需要将其转化为各 ...
- Magicodes.IE在Docker中使用
Magicodes.IE在Docker中使用 更新日志 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_ ...
- Zabbix在Docker中的应用和监控
目录 Zabbix在Docker中的应用和监控 一.如何使Zabbix跑在Docker里 1.Docker基础环境配置 2.Docker-compose安装配置 3.启动zabbix server 4 ...
随机推荐
- tarjan模板完整版
https://www.luogu.org/problem/P2863 #include<cstdio> #include<vector> using namespace st ...
- Pycharm 的常用快捷键
pycharm常用快捷键 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift ...
- mybatis oracle 逆向工程
- Java中使用md5进行hash运算
public class Md5Util { /** * @author Bean_bag * @description 进行Hash运算 * * @param input 参数字符串 * @retu ...
- BZOJ3262陌上花开
三维偏序的模板. 当然各种树套树都可以搞,这里用CDQ分治弄一下. 首先利用排序使第一维有序,然后利用cdq函数开始执行类似归并排序的操作,由于左区间的第一维一定小于右区间的第一维,所以我们在归并过程 ...
- ES索引文件和数据文件大小对比——splunk索引文件大小远小于ES,数据文件的压缩比也较ES更低,有趣的现象:ES数据文件zip压缩后大小和splunk的数据文件相当!词典文件tim/tip+倒排doc/pos和cfs文件是索引的大头
和splunk对比: ES中各个倒排索引文件的分布: 测试说明:ES2.41版本,数据使用500次批量插入,每批数据都不同,大小500条,每条数据50个字段,对应的字符串使用长度为1-10个单词随机生 ...
- idea 2019激活码
9MWZD5CC4E-eyJsaWNlbnNlSWQiOiI5TVdaRDVDQzRFIiwibGljZW5zZWVOYW1lIjoiMjAxNzY1MDYxQGNxdS5lZHUuY24gLiIsI ...
- 2018-2019-2 网络对抗技术 20165231 Exp 8 Web基础
实验内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2).Web前端javascipt(0 ...
- TynSerial序列(还原)TFDMemTable
TynSerial序列(还原)TFDMemTable 1)TFDMemTable查询数据 procedure TForm1.Qrys(accountno, sql, sql2: string; Dat ...
- 网络中的tarpit/tar pit
最近看haproxy源码,里面有个TARPIT的概念不能理解,找了很久才找到对应的意思.特此记录. tarpit 本意是“沼泽地.地洼地”,这里显然把它引申为“捕获或者困住某个物体”. 在网络语义中提 ...