聊一聊Docker与时区

前言

当我们把应用部署到容器里面之后,基本都会要和时间/时区打交道!!

大部分的应用,多多少少都会有获取当前时间的操作,试想一下应用拿到的时间不对,那么业务极有可能会乱套,造成严重的损失。

时间和时区是浑然一体的,我们在东八区,看到的是8点钟,同一时间点,别人在另外的时区看到的可能是10点钟。

所以我们要对这个问题有个简单的认知,这样才能避免在实际使用的时候踩坑。

下面来简单看看 Docker 和时区的一些内容吧。

常用镜像

比较常用的基础镜像应该是 Alpine,Ubuntu,Debian 和 CentOS 这 4 个了。

看看分别启动对应的容器,执行 date 命令,看看输出的时间。

从上面的图可以看出,这些镜像基本上都采用 UTC 时间,默认时区为零时区。

图片中,这些容器的时间都是 5 点多, 老黄本地的电脑则输出的是 13 点。

在国内的大多数应用,可能用的时间会是 13 点的比较多。

知道了这个背景,那么要怎么对容器的时区进行调整的。

时区调整

回想一下,.NET Core 的应用,在部署的时候,一般会在启动的时候指定环境变量 -e TZ=Asia/Shanghai,或者是在Dockerfile里面直接加一个 ENV TZ=Asia/Shanghai 来指定当前用的时区。

下面先来尝试一下这种方式行不行。

可以看到, debian 和 centos 在指定这个环境变量后是可以正常获取到正确的时间的,但是 alpine 和 ubuntu 却不行。

影响这个时区的,其实是一个叫 tzdata 的东西,可以理解成是一个时区的数据库。

可以参考下面的资料:

https://en.wikipedia.org/wiki/Tz_database

之所以上面 debian 和 centos 可以通过指定环境变量来切换时区,是因为这两个镜像里面已经安装了 tzdata 。

可以查看一下 /usr/share/timezone 目录。

那么,alpine 和 ubuntu 这两个镜像我们要怎么操作才可以适配。

下面以比较常用的 alpine 为例,重新构建一个镜像。

加时区的可以参考下面这个 wiki 地址

https://wiki.alpinelinux.org/wiki/Setting_the_timezone

先写一个 Dockerfile

FROM alpine:3.13RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \&& apk add tzdata

再来构建

docker build -t alpine:3.13-tz -f Dockerfile.alpine .

下面来看看通过运行时指定环境变量的方式来获取当前时间是否是正确的。

从上面的图可以看到,时间是正确的了,同样也可以看到一堆时区信息了。

再来看看,加了 tzdata 后,镜像的大小如何。

相比原始的多了 2M,还可以接受。

写在最后

时区这个问题,其实比较简单,只是要特别注意。

如果时间存储用的是时间戳,展示的时候,再根据参数转成对应的本地时间,也可以一定程度的避免踩到时区这个坑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度竟然不是中国的

2019独角兽企业重金招聘Python工程师标准>>> 身份之谜—百度是中国公司吗? 虽然,Baidu在美国上市使用了“中国的Google”这么一个概念,说真的,我知道的Baidu和Google最大的共同点也许就是他们都是美资公司。Baidu公司…

tortoisegit图标消失_安装TortoiseGit 状态图标不能正常显示

如果你安装 TortoiseSVN 之后,功能使用正常,但是文件夹或文件左上角就是不显示图标,那么你可能1. 64bit 系统上装了 32bit 的 TortoiseSVN解决方法是,再安装 64bit 的 TortoiseSVN,两者可并行运行2. Windows Explorer …

好用的验证框架FluentValidation(上)

把数据错误扼杀在早期,那就是在数据的入口处,一般数据都是打包成一个实体的方式进传递,FluentValidation就以实体类为单位进行属性验证的集合。Install-Package FluentValidation下面看一个例子吧。实体类:public class Person {p…

4.WCF事务【Transaction】

契约: namespaceRhythmk.Contracts{ [ServiceContract(Namespace"http://wwww.wangkun.com")]publicinterfaceICalculate { [OperationContract] [TransactionFlow(TransactionFlowOption.Mandatory)]voidOperationTransaction(inti);/*TransactionFlow -…

10G 职场晋升/IT干货/生活技能/理财秘籍 【全套】学习资料免费送!

你的同龄人正在抛弃你,大学毕业后五年,你就会发现,同龄人之间的差距已经是云泥之别。当年一起追剧,一起逃课,一起吹牛的同学,有人已经年薪百万,有人还在抢两块钱的红包。有人去过许多国家&#…

dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法

本文主要向大家介绍了MySQL数据库之dos或wamp下修改mysql密码的具体方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。最近在纠结如何修改mysql的密码,终于搞定了。.在wamp环境下,左击你的wamp图标。在服务下面…

转:PostgreSQL角色、用户、权限和数据库安全

PostgreSQL实现了基于角色的存取控制机制。角色是权限的集合。可以将权限赋给用户,也可以将权限赋给角色。可以将角色赋给一个用户,该用户将拥有角色的所有权限。也可以将角色赋给其它的角色。PostgreSQL中的用户和角色使用同一个名字空间。数据库中不能…

iNeuOS工业互联平台,发布消息管理、子用户权限管理、元件移动事件、联动控制、油表饼状图和建筑类设备驱动,v3.4版本...

目 录1. 概述... 22. 平台演示... 23. 消息管理... 24. 子用户权限管理... 35. 元件移动事件... 36. 联动控制... 47. 增加油表和饼图... 58. 增加住建部DL/T645和智能液位计协议驱动1. 概述发布iNeuOS 3.4版本,主…

程序猿看段子,越看越心碎!

程序员整天面对代码,压力一定很大吧~小编表示应该时不时也给你们来点段子,增加一下生活的乐趣,让你们看到希望的曙光...今天整理的10个段子,你们绝对喜欢。看看就知道啦!【一直有人问我,程序员应该看什么书…

mysql写入监控_zabbix 自定义key 监控mysql增删查改

vim /etc/zabbix/zabbix_agentd.d/mysql.conf##zabbix_agentd.d在这个文件夹下的.conf,都会被agent读取,我们这里新建的一个配置文件方便使用,这样就不需要去动主配置文件了UserParameterecho[*],echo "$1"#要传递参数要带[*],且ke…

自制H3C交换机CONSOLE线

单位有一台H3C S3600交换机,手痒痒的想进入玩一下。 从网上查得,连接CONSOLE接口用的是串口,只不过用RJ45水晶头插入而已。 山高路远,囊中羞涩,刚好手头上有一个文曲星的连接线,串口的。 凭自己半桶水的电子…

5月份Github上最热门的数据科学和机器学习项目

GitHub最近以数十亿美元的交易被微软收购。GitHub一直是开发人员之间协作的终极平台,我们已经看到数据科学和机器学习社区同样非常需要它,因此,我们希望GitHub能在微软的保护下继续发展下去。在本月排行中,上榜的项目有英特尔开源…

Blazor 中如何下载文件到浏览器

Blazor 中如何下载文件到浏览器目录一、前言二、方法一(导航跳转)三、方法二(下载后传出)(一) 使用 RestSharp 下载(二) 使用 BlazorDownloadFile 传出独立观察员 2021 年 3 月 28 日一、前言最近想给之前文章《下载中转加速器 VP…

.NET 异步,你也许不知道的5种用法

async/await异步操作,是C#中非常惊艳的“语法糖”,让异步编程变得优美且傻瓜化到了不可思议的程度。就连JavaScript都借鉴了async/await语法,让回调泛滥的JavaScript代码变得很优美。我之前录制的.NET视频教程已经把async/await等基础知识介绍…

兼容FF,IE的纯CSS下拉菜单

代码简介&#xff1a;作者的CSS水平不错啊&#xff0c;值得我们学习&#xff0c;少了JS&#xff0c;就是好看多。 代码内容&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transiti…

荐书 | 5本数学科普让你不再“畏惧”数学,感受数学的内在美

最近&#xff0c;小木了解了许多关于数学的书籍&#xff0c;简直打开了小木数学新世界的大门。出版社寄了一些样书给小木&#xff0c;经过斟酌对比之后&#xff0c;推荐以下5本数学科普书给大家。01《数学简史》[中] 蔡天新 43.50提到数学&#xff0c;很多人的第一反应就是复杂…

操作系统hpf算法事例_操作系统调度算法是什么

操作系统调度算法是什么导读&#xff1a;小编根据大家的需要整理了一份关于《操作系统调度算法是什么》的内容&#xff0c;具体内容&#xff1a;学习操作系统的朋友们肯定遇到过调度算法&#xff0c;目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源&#xff…

ASP.NET Core依赖注入初识与思考

一、前言在上一篇中&#xff0c;我们讲述了什么是控制反转(IoC)以及通过哪些方式实现的。这其中&#xff0c;我们明白了&#xff0c;「控制反转&#xff08;IoC&#xff09;」 是一种软件设计的模式&#xff0c;指导我们设计出更优良&#xff0c;更具有松耦合的程序&#xff0c…

memcached mysql缓存_memcached做数据库缓存

最近研究memcache小有成果&#xff0c;把经验分享出来。白话:很早就听说memcache了&#xff0c;一直没搞懂&#xff0c;后来又看到redis很火&#xff0c;可以用来做缓存&#xff0c;研究了半天也没搞懂咋个做缓存&#xff0c;后来也不纠结了&#xff0c;继续学习python,当对pyt…

掌握Python爬虫基础,仅需1小时!

随着互联网的发展&#xff0c;google、百度等搜索引擎让我们获取信息愈加方便。但需求总会不断涌现&#xff0c;纯粹地借助百度等收集信息是远远不够的&#xff0c;因此编写爬虫爬取信息的重要性就越发凸显。比如有人为了炒股&#xff0c;专门爬取了多种股票信息&#xff1b;也…