0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

linux中的時(shí)區(qū)問(wèn)題到底怎么處理

倩倩 ? 作者:云平臺(tái)運(yùn)維開(kāi)發(fā) ? 2019-09-28 02:56 ? 次閱讀

背景

這兩天在打docker的時(shí)候,發(fā)現(xiàn)自己的容器啟動(dòng)之后,里面date -R的輸出時(shí)區(qū)是UTC,總是和北京時(shí)間差了8個(gè)小時(shí)。

Docker中的時(shí)區(qū)問(wèn)題處理

標(biāo)準(zhǔn)鏡像

時(shí)區(qū)是UTC

查看/etc/localtime,發(fā)現(xiàn)默認(rèn)指向的是Etc/UTC時(shí)區(qū)。而且TZ環(huán)境變量也沒(méi)有被設(shè)置。

linux中的時(shí)區(qū)問(wèn)題到底是怎么處理的

實(shí)際上,我們所有關(guān)于時(shí)區(qū)處理的問(wèn)題都是glibc中處理時(shí)區(qū)的問(wèn)題。 這個(gè)問(wèn)題最權(quán)威的文檔就是glibc的官方文檔,里面關(guān)于TZ環(huán)境變量的描述介紹了時(shí)區(qū)問(wèn)題的處理。

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

其中和我們相關(guān)的部分如下。

核心意思如下: 在glibc中,TZ環(huán)境變量的值是一個(gè)文件的名字,這個(gè)文件的內(nèi)容描述了時(shí)區(qū)相關(guān)的信息。

如果TZ這個(gè)環(huán)境變量沒(méi)有設(shè)置,那么系統(tǒng)會(huì)選擇一個(gè)默認(rèn)值,在glibc中,其默認(rèn)值為/etc/localtime. 如果TZ環(huán)境變量有值,并且這個(gè)值是以/開(kāi)頭的,那么是一個(gè)絕對(duì)路徑的文件名,否則文件名為/usr/share/zoneinfo/$TZ. /usr/share/zoneinfo目錄下面有世界各地的本地時(shí)間信息,比如Asia/Shanghai.一般這個(gè)目錄下面的文件是被tzdata這個(gè)包安裝的。

按照這個(gè)思路,我們強(qiáng)制指定TZ環(huán)境變量為Asia/Shanghai,時(shí)區(qū)正確

強(qiáng)制修改/etc/localtime文件,時(shí)區(qū)也正確。

docker容器處理時(shí)區(qū)的方法

根據(jù)上面的描述,在docker容器中設(shè)置時(shí)區(qū)其實(shí)有兩個(gè)主要的方法。 一個(gè)是直接進(jìn)行TZ環(huán)境變量設(shè)置,另一個(gè)是不設(shè)置TZ環(huán)境變量,直接修改/etc/localtime的內(nèi)容(通過(guò)軟鏈接或者文件直接復(fù)制都可以)

這里以設(shè)置TZ環(huán)境變量為例(我自己比較喜歡這樣做,感覺(jué)比修改/etc/localtime更方便)。

首先,我們可以在Dockerfile里面添加ENV TZ=Asia/Shanghai,這樣docker build出來(lái)的鏡像默認(rèn)TZ環(huán)境變量就是我們要的值了。

其次,我們也可以在容器拉起的時(shí)候使用-e TZ=Asia/Shanghai進(jìn)行TZ環(huán)境變量設(shè)置,這個(gè)設(shè)置就是動(dòng)態(tài)的,同一個(gè)鏡像我們可以在拉起的時(shí)候設(shè)置不同的值。

總結(jié)

docker中的時(shí)區(qū)處理實(shí)際上就是glibc中的時(shí)區(qū)處理,了解了glibc中對(duì)事情的處理方法,核心是TZ環(huán)境變量和/etc/localtime文件,docker中的時(shí)期問(wèn)題處理就簡(jiǎn)單了.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207914
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【Intel Edison試用體驗(yàn)】+edison時(shí)區(qū)設(shè)置

    4,要根據(jù)地理位置找到本地的時(shí)區(qū),運(yùn)行以下命令:timedatectl list-timezones | egrep -o "Asia/S.*" 5,要在Linux設(shè)置本地
    發(fā)表于 08-10 15:08

    Linux系統(tǒng)的正確時(shí)區(qū)調(diào)整方法

    如果你的 Linux 系統(tǒng)時(shí)區(qū)配置不正確,必需要手動(dòng)調(diào)整到正確的當(dāng)?shù)?b class='flag-5'>時(shí)區(qū)。NTP 對(duì)時(shí)間的同步處理只計(jì)算當(dāng)?shù)貢r(shí)間與 UTC 時(shí)間的偏移量,因此配置一個(gè) NTP 對(duì)時(shí)間進(jìn)行同步并不能解決
    發(fā)表于 07-22 07:53

    Linux與Unix到底有什么不同

    Linux 與 Unix 到底有什么不同?
    發(fā)表于 05-08 14:36

    怎樣去修改嵌入式Linux時(shí)區(qū)

    造成時(shí)間差8小時(shí)呢?考慮到是時(shí)區(qū)的問(wèn)題,查詢系統(tǒng)當(dāng)前的時(shí)區(qū)設(shè)置 date -R,看到系統(tǒng)是 +0000 時(shí)區(qū),而中國(guó)統(tǒng)一采用北京所在的東8時(shí)...
    發(fā)表于 11-02 09:05

    Linux系統(tǒng)時(shí)間分為哪幾種

    Linux系統(tǒng)時(shí)間分為兩種:系統(tǒng)時(shí)間和硬件時(shí)間。系統(tǒng)時(shí)間為Linux內(nèi)核時(shí)間,硬件時(shí)間一般為BOIS的RTC時(shí)間。Linux內(nèi)核在啟動(dòng)時(shí),會(huì)嘗試讀取BIOS
    發(fā)表于 11-04 08:14

    怎樣在嵌入式linux修改時(shí)區(qū)

    一個(gè)嵌入式linux項(xiàng)目,近日有客戶使用電腦時(shí)間對(duì)其進(jìn)行校時(shí),結(jié)果發(fā)現(xiàn)時(shí)間比電腦時(shí)間晚8小時(shí),這是因?yàn)殡娔X時(shí)間用的是本地時(shí)間,即東八區(qū)時(shí)間。解決方法,就是在嵌入式linux修改時(shí)區(qū)。
    發(fā)表于 11-04 09:13

    嵌入式 linux對(duì)TZ時(shí)區(qū)是如何設(shè)置的

    date -R查看系統(tǒng)時(shí)區(qū)date -s “2020-10-23 09:38:00” 設(shè)置系統(tǒng)時(shí)間hwclock[-r|–show]//read[-s |–hctosys]//rtc ->
    發(fā)表于 11-04 07:24

    linux系統(tǒng)的時(shí)區(qū)有哪些

    關(guān)于時(shí)區(qū)的概念,其實(shí)初中地理課已經(jīng)涉及,很多人都多少了解一些,可能只是細(xì)節(jié)搞不太清楚。為什么會(huì)將地球分為不同時(shí)區(qū)呢?因?yàn)榈厍蚩偸亲晕飨驏|自轉(zhuǎn),東邊總比西邊先看到太陽(yáng),東邊的時(shí)間也總比西邊的早。東邊
    發(fā)表于 11-03 10:48 ?4418次閱讀

    Java如何顯示不同時(shí)區(qū)的時(shí)間(原理詳解)

    當(dāng)我們使用System.out.println來(lái)輸出一個(gè)時(shí)間的時(shí)候,他會(huì)調(diào)用Date類的toString方法,而該方法會(huì)讀取操作系統(tǒng)的默認(rèn)時(shí)區(qū)來(lái)進(jìn)行時(shí)間的轉(zhuǎn)換。
    發(fā)表于 01-01 14:58 ?1.2w次閱讀

    Linux內(nèi)核到底是什么應(yīng)該如何學(xué)習(xí)

    Linux可以說(shuō)是近期非?;鸬牧?,有的人想學(xué)習(xí)linux內(nèi)核,那他到底是什么呢?
    發(fā)表于 10-06 18:02 ?1846次閱讀

    嵌入式Linux 硬件時(shí)間-系統(tǒng)時(shí)間-時(shí)區(qū)設(shè)置

    Linux系統(tǒng)時(shí)間分為兩種:系統(tǒng)時(shí)間和硬件時(shí)間。系統(tǒng)時(shí)間為Linux內(nèi)核時(shí)間,硬件時(shí)間一般為BOIS的RTC時(shí)間。Linux內(nèi)核在啟動(dòng)時(shí),會(huì)嘗試讀取BIOS
    發(fā)表于 11-01 16:58 ?11次下載
    嵌入式<b class='flag-5'>Linux</b> 硬件時(shí)間-系統(tǒng)時(shí)間-<b class='flag-5'>時(shí)區(qū)</b>設(shè)置

    嵌入式Linux時(shí)區(qū)的修改

    造成時(shí)間差8小時(shí)呢?考慮到是時(shí)區(qū)的問(wèn)題,查詢系統(tǒng)當(dāng)前的時(shí)區(qū)設(shè)置 date -R,看到系統(tǒng)是 +0000 時(shí)區(qū),而中國(guó)統(tǒng)一采用北京所在的東8時(shí)...
    發(fā)表于 11-01 17:07 ?8次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>時(shí)區(qū)</b>的修改

    嵌入式linux設(shè)置時(shí)區(qū)

    一個(gè)嵌入式linux項(xiàng)目,近日有客戶使用電腦時(shí)間對(duì)其進(jìn)行校時(shí),結(jié)果發(fā)現(xiàn)時(shí)間比電腦時(shí)間晚8小時(shí),這是因?yàn)殡娔X時(shí)間用的是本地時(shí)間,即東八區(qū)時(shí)間。解決方法,就是在嵌入式linux修改時(shí)區(qū)。
    發(fā)表于 11-01 17:07 ?9次下載
    嵌入式<b class='flag-5'>linux</b><b class='flag-5'>中</b>設(shè)置<b class='flag-5'>時(shí)區(qū)</b>

    嵌入式 linux 對(duì)時(shí) TZ時(shí)區(qū)設(shè)置

    date -R 查看系統(tǒng)時(shí)區(qū)date -s “2020-10-23 09:38:00” 設(shè)置系統(tǒng)時(shí)間hwclock [-r |–show] //read[-s |–hctosys
    發(fā)表于 11-01 17:37 ?7次下載
    嵌入式 <b class='flag-5'>linux</b> 對(duì)時(shí) TZ<b class='flag-5'>時(shí)區(qū)</b>設(shè)置

    linux與window如何統(tǒng)一都顯示為中國(guó)時(shí)區(qū)的時(shí)間

    同樣的代碼,linux上的時(shí)間 比window上的時(shí)間少8小時(shí),如何統(tǒng)一都顯示為中國(guó)時(shí)區(qū)的時(shí)間?
    的頭像 發(fā)表于 08-19 17:58 ?1143次閱讀
    <b class='flag-5'>linux</b>與window如何統(tǒng)一都顯示為中國(guó)<b class='flag-5'>時(shí)區(qū)</b>的時(shí)間