docker 容器时区差8个小时问题分析与解决方案

在服务器上运行docker容器之后,发现项目输出日志的时间少了8小时,查看了一下数据库的添加时间,也是少了8小时,通过查找资料得知,是宿主机时间与容器时间时差不一样

UTC时间:世界协调时间(UTC)是世界上不同国家用来调节时钟和时间的主要时间标准,也就是零时区的时间。

CST时间:中央标准时间

Central Standard Time (USA) UT-6:00(美国cst时间:零区时减6个小时)
Central Standard Time (Australia) UT+9:30(澳大利亚cst:加9个半小时)
China Standard Time UT+8:00(中国cst:加8个小时)
Cuba Standard Time UT-4:00 (古巴cst:减4个小时)

如:当UTC时间为0点时,中国CST时间为8点,因为零时区和中国北京时区相差8个时区。
在这里插入图片描述
此时搜到了解决方案,如下:

复制主机的localtime

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

或者

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置完之后,输入指令查看当前docker容器时区

docker exec [name] date

发现时区已改过来,可是项目的日志时间以及数据库的时间还是没改过来

又找到了另一种解决方案:修改Dockerfile文件,重新build镜像

#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

在build的时候报错如下:

cp: can't stat '/usr/share/zoneinfo/Asia/Shanghai': No such file or directory

通过查找资料得知,现在需要用以下写法:

# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Dockerfile设置完时区,重新build,成功,查看日志,成功

docker exec [name] date 查看一下时区,又回到了UTC时区,于是尝试一下2者并用

最终解决方案:

1.Dockerfile文件里设置时区:
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.在启动docker容器时,指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的

docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime

至此,主机时区与容器时区一致,日志输出结果时间也对了,数据库保存的时间也对了。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值