码头工人容器时区错误问题该怎么解决

  介绍

码头工人容器时区错误问题该怎么解决,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

背景

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

问题

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

问题分析及解决办法

经过排查发现,node-schedule库不支持选择时区,所以默认按照全球标准时UTC发送,我们通常传入的时间是中国上海时区时间CST,中间会相差八小时。
更换了定时任务库,采用node-schedule-tz定时任务库,支持选择中科时区,并采用corntab时间格式

let  j =, schedule.scheduleJob(& # 39;名字# 39;,“0,7,*,*,*“,& # 39;亚洲/上海# 39;,,function  (), {      console.log才能(“执行任务“);      getAllDataAndSendMail才能();      });

新的问题

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

问题分析及解决办法

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

let  today =, new 日期()

因为我有打印今天的日志,查看下日志

docker  logs  -f  [containerID],   #,今天:2021 - 11 - 12 - t23:00:00.106z

发现早7点上发送的邮件,今天拿的到的时间是前一天的23点,也是相差8小时
利用下面的命令,进入码头工人容器中查看时间

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

果然是UTC全球标准时,说明发送邮件时间确实改回来了,但是代码执行时获取的时间是此刻的全球标准时。
我们把本机的时间复制给容器的时间

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

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

看完上述内容,你们掌握码头工人容器时区错误问题该怎么解决的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

码头工人容器时区错误问题该怎么解决