docker容器時(shí)區(qū)錯(cuò)誤問(wèn)題
背景
利用node-schedule定時(shí)任務(wù)庫(kù)寫(xiě)了一個(gè)自動(dòng)定時(shí)發(fā)郵件的腳本,每天上午7點(diǎn)發(fā)送郵件,郵件中會(huì)獲取當(dāng)天日期
問(wèn)題
收到郵件的時(shí)間為下午三點(diǎn),而不是上午7點(diǎn),推測(cè)是時(shí)區(qū)設(shè)置問(wèn)題
問(wèn)題分析及解決辦法
經(jīng)過(guò)排查發(fā)現(xiàn),node-schedule庫(kù)不支持選擇時(shí)區(qū),所以默認(rèn)按照全球標(biāo)準(zhǔn)時(shí)UTC發(fā)送,我們通常傳入的時(shí)間是中國(guó)上海時(shí)區(qū)時(shí)間CST,中間會(huì)相差八小時(shí)。
更換了定時(shí)任務(wù)庫(kù),采用node-schedule-tz定時(shí)任務(wù)庫(kù),支持選擇CST時(shí)區(qū),并采用corntab時(shí)間格式
let j = schedule.scheduleJob('name',"0 7 * * *",'Asia/Shanghai', function () {
console.log("執(zhí)行任務(wù)");
getAllDataAndSendMail();
});
新的問(wèn)題
更改完時(shí)間后,出現(xiàn)了一個(gè)新的問(wèn)題,郵件中獲取的時(shí)間是昨天的時(shí)間,而不是今天的時(shí)間
問(wèn)題分析及解決辦法
想了一下,代碼中總共有兩個(gè)地方獲取了時(shí)間,一個(gè)是定時(shí)任務(wù)庫(kù)傳入的發(fā)郵件的時(shí)間,一個(gè)是腳本里獲取當(dāng)前時(shí)間
let today = new Date()
因?yàn)槲矣写蛴oday的log,查看下日志
docker logs -f [containerID] # today:2021-11-12T23:00:00.106Z
發(fā)現(xiàn)早上7點(diǎn)發(fā)送的郵件,today拿到的時(shí)間是前一天的23點(diǎn),也是相差8小時(shí)
利用下面的命令,進(jìn)入docker容器中查看時(shí)間
$ docker exec -it [containerID] sh # 進(jìn)入容器之后前面會(huì)變成# # 輸入date查看時(shí)間 date # Sat Nov 13 05:05:31 UTC 2021
果然是UTC全球標(biāo)準(zhǔn)時(shí),說(shuō)明發(fā)送郵件時(shí)間確實(shí)改回來(lái)了,但是代碼執(zhí)行時(shí)獲取的時(shí)間是此刻的全球標(biāo)準(zhǔn)時(shí)。
我們把本機(jī)的時(shí)間復(fù)制給容器的時(shí)間
docker cp /etc/localtime [containerID]:/etc/
再次按照上述查看容器內(nèi)時(shí)間,發(fā)現(xiàn)已經(jīng)改回來(lái)CST了,應(yīng)該沒(méi)有什么問(wèn)題了
到此這篇關(guān)于docker容器時(shí)區(qū)錯(cuò)誤問(wèn)題的文章就介紹到這了,更多相關(guān)docker 時(shí)區(qū)錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案
這篇文章主要介紹了Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案,錯(cuò)誤通常是由于RabbitMQ的安全配置導(dǎo)致的,RabbitMQ默認(rèn)配置允許的用戶僅能通過(guò)localhost訪問(wèn),文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下2025-01-01
docker+mongodb設(shè)置數(shù)據(jù)庫(kù)的賬號(hào)和密碼的實(shí)現(xiàn)步驟
本文主要介紹了docker+mongodb設(shè)置數(shù)據(jù)庫(kù)的賬號(hào)和密碼的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
Docker安裝ClickHouse并初始化數(shù)據(jù)測(cè)試
clickhouse作為現(xiàn)在流行的數(shù)據(jù)分析數(shù)據(jù)庫(kù),非常熱門,docker如何安裝ClickHouse,很多朋友并不是很明白,今天小編抽空給大家分享一篇教程關(guān)于Docker安裝ClickHouse并初始化數(shù)據(jù)測(cè)試的問(wèn)題,一起看看吧2021-06-06
docker配置阿里云鏡像倉(cāng)庫(kù)的實(shí)現(xiàn)
本文主要介紹了docker配置阿里云鏡像倉(cāng)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Docker安裝MS?SQL?Server并使用Navicat遠(yuǎn)程連接的操作方法
SQL?Server支持廣泛的應(yīng)用程序開(kāi)發(fā)接口(API),包括T-SQL、ADO.NET、ODBC、OLE?DB等,并支持多種操作系統(tǒng),包括Windows、Linux和Docker等,這篇文章主要介紹了Docker安裝MS?SQL?Server并使用Navicat遠(yuǎn)程連接,需要的朋友可以參考下2023-06-06
Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn)
本文主要介紹了Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
詳解docker pull下來(lái)的鏡像存儲(chǔ)在哪里
這篇文章主要介紹了詳解docker pull下來(lái)的鏡像存儲(chǔ)在哪里,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
docker容器無(wú)法訪問(wèn)宿主機(jī)端口的解決
這篇文章主要介紹了docker容器無(wú)法訪問(wèn)宿主機(jī)端口的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Docker鏡像的默認(rèn)存儲(chǔ)位置及修改步驟
Docker鏡像默認(rèn)存儲(chǔ)在?/var/lib/docker?目錄下,在Linux系統(tǒng)中,這個(gè)目錄通常是在根目錄下,可以使用相應(yīng)命令查看,下面給大家介紹Docker鏡像的默認(rèn)存儲(chǔ)位置及修改步驟,感興趣的朋友一起看看吧2024-06-06

