文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

docker容器时区错误问题该怎么解决

2023-06-25 21:20

关注

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

背景

利用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了,应该没有什么问题了

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯