解決Docker容器時區(qū)及時間不同步問題的方法
今天在系統(tǒng)集成測試時由測試人員提交了一個測試bug,原因是提交業(yè)務(wù)數(shù)據(jù)時間與實際時間(北京時間)有偏差,導(dǎo)致統(tǒng)計異常。由于我們集成測試是向測試人員直接提供完整的Docker鏡像作為測試環(huán)境,原因應(yīng)該是出在容器時間設(shè)置上。
拿到交付的docker鏡像后,啟動后進入容器控制臺,使用date命令查看果然時間不正確。再查看宿主機時間是正確,這樣肯定是容器啟動時未將時區(qū)與宿主機保持同步了,由于測試鏡像是由dockfile直接構(gòu)建,因此問題基本了定準在dockerfile文件上了。
打開dockerfile檢查后發(fā)現(xiàn)確實確失與宿主機時區(qū)同步設(shè)置。故在此將如何添加時區(qū)同步過程記錄一下,同時給遇到過類似問題的同學(xué)以借鑒:
以下以Alpine制作的docker鏡像為例(也是我們的測試鏡像):
1 Dockerfile修改
1.1 增加安裝tzdata包
在安裝包時安裝tzdata安裝包,并且在構(gòu)建成功后不能清理此安裝包
#定義環(huán)境變量 ENV TIME_ZONE Asiz/Shanghai #dockerfile增加命令 RUN \ #安裝tzdata安裝包 && apk add --no-cache tzdata \
1.2 增加時區(qū)配置
安裝此安裝包后,會在/usr/share/zoneinfo目錄下生成各時區(qū)配置信息,Alpine目錄并無timezone及l(fā)ocatime配置,此時我們需要將時區(qū)值覆寫至Alpine的timezone及l(fā)ocaltime配置中,命令如下:
```
RUN \
...
#安裝tzdata安裝包
&& apk add --no-cache tzdata \
#設(shè)置時區(qū)
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
至此,dockerfile的修改工作已經(jīng)結(jié)束。
2 宿主機時區(qū)及時間檢查
檢查宿主機時間及時間是否正確,使用以下命令:
```
[root@docker ~]# timedatectl
Local time: Tue 2016-12-13 21:52:13 EST
Universal time: Wed 2016-12-14 02:52:13 UTC
RTC time: Wed 2016-12-14 02:52:13
Time zone: America/New_York (EST, -0500) //默認為西五區(qū)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: no
Last DST change: DST ended at
Sun 2016-11-06 01:59:59 EDT
Sun 2016-11-06 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
Sun 2017-03-12 01:59:59 EST
Sun 2017-03-12 03:00:00 EDT
#修改為東八區(qū)
[root@docker ~]# timedatectl set-timezone Asia/Shanghai
Local time: Wed 2016-12-14 10:53:10 CST
Universal time: Wed 2016-12-14 02:53:10 UTC
RTC time: Wed 2016-12-14 02:53:10
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@docker ~]# date
Wed Dec 14 10:53:49 CST 2016
#調(diào)整時間
[root@docker ~]# date -s "2016-12-13 21:54:20"
#時間同步,不執(zhí)行則無法生效
[root@docker ~]# clock -w
[root@docker ~]# timedatectl
Local time: Tue 2016-12-13 22:59:44 CST
Universal time: Tue 2016-12-13 14:59:44 UTC
RTC time: Tue 2016-12-13 14:59:44
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
```
至此宿主機時區(qū)及時間調(diào)整完畢。
3. 構(gòu)建容器測試
根據(jù)上述dockerfile重新生成鏡像,并使用RUN命令啟動容器,查看當(dāng)時窗口時間
/ # date Tue Dec 13 23:01:18 CST 2016
已與宿主同步,整個調(diào)整過程結(jié)束~~
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
再見 Docker如何5分鐘轉(zhuǎn)型 containerd
這篇文章主要介紹了再見 Docker如何5分鐘轉(zhuǎn)型 containerd,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Docker學(xué)習(xí)筆記之Weave實現(xiàn)跨主機容器互聯(lián)
這篇文章主要介紹了Docker學(xué)習(xí)筆記之Weave實現(xiàn)跨主機容器互聯(lián),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
在CentOS啟動時自動加載內(nèi)核模塊overlayfs操作
這篇文章主要介紹了在CentOS啟動時自動加載內(nèi)核模塊overlayfs操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker 實現(xiàn)在線集成開發(fā)環(huán)境實例詳解
這篇文章主要介紹了Docker 實現(xiàn)在線集成開發(fā)環(huán)境實例詳解的相關(guān)資料,這里對實現(xiàn)在線集成開發(fā)環(huán)境,進行了詳細的介紹及實現(xiàn),需要的朋友可以參考下2016-11-11

