QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5874|回复: 1
打印 上一主题 下一主题

Docker 中时区和宿主机相隔八个小时的解决方案之一

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-30 15:21 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    Docker 中时区和宿主机相隔八个小时的解决方案之一5 j1 m2 t) u  {; I2 @9 b
    前言
    2 P9 q2 D& w$ s/ U. N/ ?  _' K& [. c6 p6 _6 {+ V
    项目部署在 tomcat 容器中,但是定时任务在凌晨插入数据到数据库后,第二天查看数据时间不对,时间延后的8个小时,于是踏上了解决之路。8 N2 [- I$ {5 g, R* `! B/ z6 M
    ' I6 h7 d4 N' q, ~* n# w
    关键字:Linux、Docker、Tomcat
    & l/ U" M6 q0 r0 ^( q9 S& ~1 O
    一、问题重现
    9 c* {" e; I1 h/ C3 P9 J$ p" p. \+ _
    项目中设置的定时任务是凌晨0点整执行,但是第二天查看数据库发现插入的时间是当天的8点钟(为什么是延后后面会讲),然后查看日志发现,打印日志的时间也和现在对不上(比现在少八个小时),就已经很明了了,时区的问题,然后重要的是怎么解决,把这个打印时间变成和现在对应的时间。
    # ^9 t  L3 M& |  s# m" X2 O- ^7 T6 M; t8 U5 D
    [root@iZh4ntc7dmrvkzZ zxw]# docker logs -f --tail 100 965abb1fb546 # 查看 docker 容器日志的最后100行,动态的(新增继续打印)
    : f! d3 L* F) R2 I. S# 打的日志上面的信息会比当前的时间(北京时间)少8个小时
    * v! B3 L4 ]% e# k: j28-May-2020 02:41:31.492 INFO [Thread-9] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]& m# v% m1 Q, h7 ^
    28-May-2020 02:41:31.496 INFO [Thread-9] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
    ; Q/ u) y5 }* i% `/ v; X; d28-May-2020 02:41:31.498 INFO [Thread-9] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]. E# r2 a4 c1 b; n
    [root@iZh4ntc7dmrvkzZ zxw]# docker exec 965abb1fb546 date # 查看指定容器的时区,965abb1fb546为容器 id+ K4 h, q* G  @  G
    Thu May 28 02:50:42 UTC 20200 b, N* s2 ^. u& \& E& m
    [root@iZh4ntc7dmrvkzZ ~]# date # 查看 linux 的时间; V! Q* a1 u$ k+ R$ z. `( A
    Thu May 28 14:19:38 CST 2020
    / r; p! x: Z( V* C4 j1 F) \, e, y$ I[root@iZh4ntc7dmrvkzZ ~]#
    - E$ P2 S& U. E9 Z; X1) E; s6 j% Q; a1 V+ V
    20 V: F1 r4 D6 l
    3
    . W/ q$ ^+ l& g3 H" p% }4; S% p2 p# d) G4 O, l5 G" S
    5
    : ?1 z# {; A% i5 U( Z. b- R6
    * u' ^' h7 Z/ x+ l( F/ c+ N# Z7
    - T. y& o0 M, j6 ~. v- c8
    , {& k1 r  ^! F1 |) j/ B% q9
    7 s, K, A" `* M$ u2 X0 ~9 M$ H明显一个是 UTC,一个是 CST,不一样的时区,相差八个小时。
    ) x: n, i6 k9 O4 [# t3 V
    6 F' l2 R/ g$ x! M二、分析问题! z# m1 k7 G% ~1 [! k
    : d" ?/ X, ~; S' ]  M2 }3 g
    刚遇到的时候只知道是时区问题,最先想到的就是 tomcat 的时区设置不对,然后找了资料修改之后,发现并没有什么暖用,然后查资料的时候发现 docker 的时间也会出现这种情况,就把问题方向占时确认为 docker 问题(后面修改成功也证明了确实是 docker 的问题)。; O7 [# q, y% `; o: F
      j4 ]2 g, k, Q( S7 `; I. |# a6 A" x
    三、修改 docker 容器的时区
    $ C0 Z" n3 g( h/ y) D' q/ i- Z3 }" {* Z+ ^6 J
    1、进入需要修改时区的 docker 容器
    0 k  w" W6 F6 Y3 s! Z; C( }( ~3 E+ s3 I/ I0 D, h. P4 y: k0 @
    [root@iZh4ntc7dmrvkzZ zxw]# docker exec -it 965abb1fb546 /bin/bash# U! X! P* x$ }3 L* t& |
    root@965abb1fb546:/usr/local/tomcat# cd /usr/share/zoneinfo/Asia # 进入亚洲时区文件夹
    $ f6 |+ [5 [1 [5 h' U8 m( ]6 F  K17 A- [* Z# o% F( X, `' ]  b) y0 K
    2、复制上海(Shanghai)时区到 localtime
    1 n. P1 Q* L& q4 @0 _: F& o+ Z1 d+ ?0 c! U& s: V. f( b
    root@965abb1fb546:/usr/share/zoneinfo/Asia# cp Shanghai /etc/localtime # cp 直接复制) e2 n, \  q$ R& C8 B4 T0 _
    root@965abb1fb546:/usr/share/zoneinfo/Asia# exit # 退出容器
    - c& B1 ?' d1 P: Jexit# a: k  i  ^: \3 Q2 R/ y
    [root@iZh4ntc7dmrvkzZ zxw]# docker restart 965abb1fb546 # 重启容器5 M0 z( F( ]# q: i* {# M, L
    965abb1fb546
    . H) H6 p0 {( O4 d4 M! \* v+ Y[root@iZh4ntc7dmrvkzZ zxw]# docker exec 965abb1fb546 date # 再次查看,已经和现在的时间对应了,时区也变成了 CST 了
    , _! k8 h1 M6 {& V# nThu May 28 11:12:12 CST 2020
    2 k; r  Q7 T. A1
    8 Y3 A, g6 K9 b2 n2
    0 I# g% B8 f& l; m$ M* f4 N3 ?3
    6 _  a& p+ u- K6 N4 }- j, M4
    " S9 M7 V3 ]9 |5 a3 R# w0 d5 z; X55 i. L; D$ v! e. P, A6 j' V: H; f2 }
    62 C) Z- V& c* H3 @  ]
    四、验证(重启容器并查看日志)0 m6 P1 m1 b" r( j6 S1 s1 [

    2 `; A- R) J1 M& i/ J# O[root@iZh4ntc7dmrvkzZ zxw]# docker logs -f --tail 100 965abb1fb546) A8 z( I  F9 p5 i
    28-May-2020 11:16:56.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
    : g' h5 V/ ?( t  u' v9 ]$ A28-May-2020 11:16:56.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            3.10.0-862.14.4.el7.x86_64
    * d! x& P0 ?' W  p5 K' S: |* {28-May-2020 11:16:56.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
    ) N+ c) P3 i$ \1
    0 Y  h; s0 E- I: F0 F& m/ g0 I  ^2
    1 N$ o4 i1 @: e1 Z8 w3
    " B% @! B/ x3 y5 @, o; ~" [可以看到打印的日志已经和当前时间相同了。. g4 V8 w. i1 @! [8 T( w, o

    : A, V8 ?8 s6 f" {9 g% I2 K( j五、说明
    6 d. _5 Q2 H  \1 \4 u
    1 e5 B) u/ ^. u; q% t$ C9 i* a5 x' A为什么时区时间是少了8个小时,但是数据库的时间却比设置的时间多了8个小时?
    " {& a' Z. o  K* M, L% |; t是因为数据库设置了操作时间为上海时间(Shanghai),所以插入的时候会自动在当前时间➕8个小时,指定的0点本来是指定的上海时间的0点,但是时区不对(执行的时候始终是0点),就是在另一个时区的零点执行的,另一个时区的零点其实就是 Shanghai 时间的八点中,所以数据库的时间是 Shanghai 时间的8点钟执行的,说白了就是时区把0点延后了8小时,但是保存到数据库是 Shanghai 时间,于是就➕了八个小时,有点小饶,但是想清楚了就完全能理解了。
      |0 n( M; {' Z8 r) _. T4 z3 c% |% W" P( g! {
    六、参考
    ( Z3 g2 K0 d$ @8 {+ [
    2 T# j/ Y- i7 Z( m; W3 N参考文章
    4 N1 P1 ^" Z$ R* y2 X' F5 i
    6 q1 F0 E' E5 S' p总结
    % s; n; b7 Y6 K7 l% u: J0 {' W5 p' t5 U% f! v9 i: x" ]) r+ L# }$ [# s
    时区问题经常遇到,修改的地方也不尽相同,所以记录在此,下次遇到了能快速解决问题;这也只是其中一种修改 docker 容器的时区方法,还有其它的比如,启动的时候挂载宿主机的时区等,这里不再说明,网上也有很多资料,以后有遇到再记录。
    + `5 i, O! k. z+ j! X+ b. r% B+ I————————————————
    8 s5 v3 s/ L& p0 X0 O3 `* a版权声明:本文为CSDN博主「忧郁的白衬衫丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    0 g7 L. F# M' L; S8 i" m原文链接:https://blog.csdn.net/weixin_42816285/article/details/106403093* q4 w3 [. R- b4 x, s2 A" z

    ; c0 i% |4 |7 ^. v* Y. _8 K% L5 Q% t( S. r, K$ Z# i7 x2 x" V
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    0

    主题

    1

    听众

    6

    积分

    升级  1.05%

    该用户从未签到

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-2 01:27 , Processed in 0.299244 second(s), 56 queries .

    回顶部