docker容器時區(qū)錯誤問題
背景
利用node-schedule定時任務(wù)庫寫了一個自動定時發(fā)郵件的腳本,每天上午7點發(fā)送郵件,郵件中會獲取當(dāng)天日期
問題
收到郵件的時間為下午三點,而不是上午7點,推測是時區(qū)設(shè)置問題
問題分析及解決辦法
經(jīng)過排查發(fā)現(xiàn),node-schedule庫不支持選擇時區(qū),所以默認按照全球標準時UTC發(fā)送,我們通常傳入的時間是中國上海時區(qū)時間CST,中間會相差八小時。
更換了定時任務(wù)庫,采用node-schedule-tz定時任務(wù)庫,支持選擇CST時區(qū),并采用corntab時間格式
let j = schedule.scheduleJob('name',"0 7 * * *",'Asia/Shanghai', function () {
console.log("執(zhí)行任務(wù)");
getAllDataAndSendMail();
});
新的問題
更改完時間后,出現(xiàn)了一個新的問題,郵件中獲取的時間是昨天的時間,而不是今天的時間
問題分析及解決辦法
想了一下,代碼中總共有兩個地方獲取了時間,一個是定時任務(wù)庫傳入的發(fā)郵件的時間,一個是腳本里獲取當(dāng)前時間
let today = new Date()
因為我有打印today的log,查看下日志
docker logs -f [containerID] # today:2021-11-12T23:00:00.106Z
發(fā)現(xiàn)早上7點發(fā)送的郵件,today拿到的時間是前一天的23點,也是相差8小時
利用下面的命令,進入docker容器中查看時間
$ docker exec -it [containerID] sh # 進入容器之后前面會變成# # 輸入date查看時間 date # Sat Nov 13 05:05:31 UTC 2021
果然是UTC全球標準時,說明發(fā)送郵件時間確實改回來了,但是代碼執(zhí)行時獲取的時間是此刻的全球標準時。
我們把本機的時間復(fù)制給容器的時間
docker cp /etc/localtime [containerID]:/etc/
再次按照上述查看容器內(nèi)時間,發(fā)現(xiàn)已經(jīng)改回來CST了,應(yīng)該沒有什么問題了
到此這篇關(guān)于docker容器時區(qū)錯誤問題的文章就介紹到這了,更多相關(guān)docker 時區(qū)錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解使用 Docker 構(gòu)建 LNMP 環(huán)境
本篇文章主要介紹了使用 Docker 構(gòu)建 LNMP 環(huán)境,詳細的介紹了配置LNMP 環(huán)境的步驟。具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Docker下安裝ElasticSearch和Kibana的示例代碼
這篇文章主要介紹了Docker下安裝ElasticSearch和Kibana的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
centos7搭建docker私人倉庫的方法(kubernetes)
這篇文章主要介紹了centos7搭建docker私人倉庫的方法(kubernetes),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Docker拉取鏡像失敗解決(connect: connection refused)
最近遇到Docker拉取centos鏡像時報錯,本文主要介紹了Docker拉取鏡像失敗解決(connect: connection refused),具有一定的參考價值,感興趣的可以了解一下2024-07-07

