千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,docker容器时区错误问题该怎么解决,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。背景利用node-schedule定时任务库写了一个
千家信息网最后更新 2026年11月03日docker容器时区错误问题该怎么解决

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容器时区错误问题该怎么解决的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

时间 问题 邮件 容器 时区 任务 全球 标准 标准时 错误 代码 内容 办法 小时 方法 更多 脚本 分析 支持 选择 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 广州大一互联网络科技有限公司 互联网科技工作委员会副主任毛军 科技互联网龙头 网络科技有限互联网 喔噻互联网科技 为想互联网科技 上海致骋互联网科技 广州紫鲸互联网科技 卓越科技互联网 招聘 央行互联网金融科技公司 华服互联网科技官网 辽宁互联网新科技 徐州市互联网科技有限公司 保险科技服务互联网营销体系 互联网金融科技公司的优势 江苏苏星互联网科技有限公司 广州千川互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 平安好医生打造互联网科技医疗 金融科技还是互联网 互联网品科技 唐信互联网科技 大连 掌上梦互联网科技 中国的互联网科技企业的崛起 重庆互联网医院沙龙医盟信息科技 健康食品互联网创新科技园项目 山东有哪些互联网科技公司 山东星卡互联网科技有限公司官网 长沙易易互联网科技有限公司
0