docker容器时区错误问题

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录背景 问题 问题分析及解决办法 新的问题 问题分析及解决办法

背景

利用node-schedule定时任务库写了一个自动定时发邮件的脚本,每天上午7点发送邮件,邮件中会获取当天日期

问题

收到邮件的时间为下午三点,而不是上午7点,推测是时区设置问题

问题分析及解决办法

经过排查发现,node-schedule库不支持选择时区,所以默认按照全球标准时UTC发送,我们通常传入的时间是中国上海时区时间CST,中间会相差八小时。

更换了定时任务库,采用node-schedule-tz定时任务库,支持选择CST时区,并采用corntab时间格式

let j = schedule.scheduleJob(name,”0 7 * * *”,Asia/Shanghai, function () { console.log(“执行任务”); getAllDataAndSendMail(); });

新的问题

更改完时间后,出现了一个新的问题,邮件中获取的时间是昨天的时间,而不是今天的时间

问题分析及解决办法

想了一下,代码中总共有两个地方获取了时间,一个是定时任务库传入的发邮件的时间,一个是脚本里获取当前时间

let today = new Date()

因为我有打印today的log,查看下日志

docker logs -f [containerID] # today:2021-11-12T23:00:00.106Z

发现早上7点发送的邮件,today拿到的时间是前一天的23点,也是相差8小时

利用下面的命令,进入docker容器中查看时间

$ docker exec -it [containerID] sh # 进入容器之后前面会变成# # 输入date查看时间 date # Sat Nov 13 05:05:31 UTC 2021

果然是UTC全球标准时,说明发送邮件时间确实改回来了,但是代码执行时获取的时间是此刻的全球标准时。

我们把本机的时间复制给容器的时间

docker cp /etc/localtime [containerID]:/etc/

再次按照上述查看容器内时间,发现已经改回来CST了,应该没有什么问题了

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容