QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5952|回复: 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 中时区和宿主机相隔八个小时的解决方案之一  ?8 E. r( \  h) g$ J
    前言& \( z0 W0 H: Y7 o/ o

    , s- b9 w/ U. q8 G项目部署在 tomcat 容器中,但是定时任务在凌晨插入数据到数据库后,第二天查看数据时间不对,时间延后的8个小时,于是踏上了解决之路。8 u$ W$ y; [$ Z! ?" B/ J7 k
    - D: a, G' f- e1 f8 b5 r" X4 h; `
    关键字:Linux、Docker、Tomcat) a3 M+ S5 P2 p& x& C$ r8 J: Q

    " H: |) b4 L, J& i2 G8 y/ k. P一、问题重现: L+ ?9 W. u2 g* N

    / t$ i5 c; P( Y. @5 g: U项目中设置的定时任务是凌晨0点整执行,但是第二天查看数据库发现插入的时间是当天的8点钟(为什么是延后后面会讲),然后查看日志发现,打印日志的时间也和现在对不上(比现在少八个小时),就已经很明了了,时区的问题,然后重要的是怎么解决,把这个打印时间变成和现在对应的时间。2 ~0 N3 L8 |& E9 V9 n

    3 W9 W* v8 Y0 |" |) r3 ^; k[root@iZh4ntc7dmrvkzZ zxw]# docker logs -f --tail 100 965abb1fb546 # 查看 docker 容器日志的最后100行,动态的(新增继续打印)7 o& D! g) w0 g, e0 b; u
    # 打的日志上面的信息会比当前的时间(北京时间)少8个小时
    6 Y/ s8 M! }) K" @0 B28-May-2020 02:41:31.492 INFO [Thread-9] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
    . C& Q+ W  @$ ]9 o! }28-May-2020 02:41:31.496 INFO [Thread-9] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]# e  S( \" q" r. X& G
    28-May-2020 02:41:31.498 INFO [Thread-9] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]8 I8 K3 I* E1 ^; R
    [root@iZh4ntc7dmrvkzZ zxw]# docker exec 965abb1fb546 date # 查看指定容器的时区,965abb1fb546为容器 id
    : Z- Q* J, x$ S% r6 o! s/ s" _& PThu May 28 02:50:42 UTC 2020' u% K5 w- L- K+ m/ [2 q; v
    [root@iZh4ntc7dmrvkzZ ~]# date # 查看 linux 的时间
    . |7 c( X2 _6 M0 a- Y- g! A9 WThu May 28 14:19:38 CST 2020" ?9 K2 P$ ^! h/ m
    [root@iZh4ntc7dmrvkzZ ~]#
    ( l8 X. k  T- m# F* p% J10 a) A% c. {; |1 ~  E9 q
    2" @( V' z1 E  x9 o, p; r
    3; I) X/ f7 F+ u- ]+ u) ^( x+ y# t
    4/ g0 k" H9 M6 ~# r) p$ ?" T6 K3 Z% I4 d
    5
    ; J8 p& d+ A6 l- k9 g* A6/ x4 ^# e* I" r; v  N; s* W
    7
    % M+ x* Y+ V+ x2 n3 R4 x8
    - ^# ^0 k/ L$ i5 m1 j) _  A9
    $ {3 z) O4 [, v明显一个是 UTC,一个是 CST,不一样的时区,相差八个小时。
    / ?$ R# ~8 A/ M3 Q  H- D* n) q& r. r  D- {' f' _/ x8 y. l& g
    二、分析问题
    ( G" s% r" t  H) p% b! z& E
    3 G# O! m( R' t刚遇到的时候只知道是时区问题,最先想到的就是 tomcat 的时区设置不对,然后找了资料修改之后,发现并没有什么暖用,然后查资料的时候发现 docker 的时间也会出现这种情况,就把问题方向占时确认为 docker 问题(后面修改成功也证明了确实是 docker 的问题)。
    / m) b' [) a) S1 N, G( _- I3 Q2 q$ Y% U; R, \! H% R' e, T( S, W9 O
    三、修改 docker 容器的时区
    3 i: }- B) E: R5 j% x- z; a8 y' R# a. d9 Q: \6 c- V2 M
    1、进入需要修改时区的 docker 容器
    & o% ~" T3 e  l" G; H+ e% M$ h' F# T7 k, w: i' m" ]3 _. A5 _3 _
    [root@iZh4ntc7dmrvkzZ zxw]# docker exec -it 965abb1fb546 /bin/bash
    ) ]! q8 B6 x/ Aroot@965abb1fb546:/usr/local/tomcat# cd /usr/share/zoneinfo/Asia # 进入亚洲时区文件夹
    4 U9 {7 n7 Y% |4 S" ~8 J9 Y1
    9 T$ P0 U1 P# M3 p3 g2、复制上海(Shanghai)时区到 localtime
    ) I8 O% x& P) V8 D' ^: i+ Z, y. M4 a) u
    4 r% [+ W8 ?/ s. C0 y. |root@965abb1fb546:/usr/share/zoneinfo/Asia# cp Shanghai /etc/localtime # cp 直接复制/ D+ Y/ D8 Z: u. r# y% @& K/ [
    root@965abb1fb546:/usr/share/zoneinfo/Asia# exit # 退出容器
    ( p( z6 z* ^8 X% Xexit
    + x1 J! U1 C" f[root@iZh4ntc7dmrvkzZ zxw]# docker restart 965abb1fb546 # 重启容器3 I8 F. W9 z- m5 i
    965abb1fb546
    5 L! ^/ e* J! P+ e7 I[root@iZh4ntc7dmrvkzZ zxw]# docker exec 965abb1fb546 date # 再次查看,已经和现在的时间对应了,时区也变成了 CST 了( P% w  {- D. R( Q
    Thu May 28 11:12:12 CST 2020: D! F  I& E) o; Z
    1
    ) b) W6 e! T3 O  B% H8 G2
    ! F, t, {( ?4 I- B" `* |- X1 ~3! h2 v' X5 ?7 I8 \: E" K- t; E
    4
    3 Q/ C. X+ i# ~5
    8 [1 s- R: B% U6
    : j+ _" d6 E/ S1 G+ \四、验证(重启容器并查看日志)5 E# R6 P" z) N  u
    7 W3 ]) b  ?! p. F. n8 l6 O4 D7 y
    [root@iZh4ntc7dmrvkzZ zxw]# docker logs -f --tail 100 965abb1fb546% Y# s- h6 R% r; q, m
    28-May-2020 11:16:56.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux2 E" V7 [( K- y- _4 p) O
    28-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& H3 }' O* I% E6 w3 v/ l0 ]7 s; O
    28-May-2020 11:16:56.191 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
    ) X0 K& C; Z* L/ y8 @, h1& `8 C: i8 j8 F
    2* f0 g" h0 z2 `: W/ N5 b
    3
    5 {# B$ a3 M* ]* _1 ]8 L可以看到打印的日志已经和当前时间相同了。, w9 [$ X1 ?; W6 s+ t; n
    3 L) ]# L' W) N% a. a9 H8 r
    五、说明5 N% ^* R$ F8 L  v" v4 v
    - A9 k4 u, }" \/ ?3 S0 o
    为什么时区时间是少了8个小时,但是数据库的时间却比设置的时间多了8个小时?
    4 @  J$ i4 `( d7 f" N是因为数据库设置了操作时间为上海时间(Shanghai),所以插入的时候会自动在当前时间➕8个小时,指定的0点本来是指定的上海时间的0点,但是时区不对(执行的时候始终是0点),就是在另一个时区的零点执行的,另一个时区的零点其实就是 Shanghai 时间的八点中,所以数据库的时间是 Shanghai 时间的8点钟执行的,说白了就是时区把0点延后了8小时,但是保存到数据库是 Shanghai 时间,于是就➕了八个小时,有点小饶,但是想清楚了就完全能理解了。
    9 Q0 m; w1 [4 y: D' f- ]
    ( R& r- u5 W, K+ H: ?  h/ W" U六、参考
    7 U. W% Y! Q( r% a( a; D& ?3 p3 A0 B, r& z6 ]# H5 S8 F# M
    参考文章
    5 K2 B( n( f$ D/ `# _& ^
    / a* N3 Z4 ^  N7 R3 d总结# U* g3 w! _8 p5 n, R
    5 K6 l. f; n5 Z; N
    时区问题经常遇到,修改的地方也不尽相同,所以记录在此,下次遇到了能快速解决问题;这也只是其中一种修改 docker 容器的时区方法,还有其它的比如,启动的时候挂载宿主机的时区等,这里不再说明,网上也有很多资料,以后有遇到再记录。( T' P# r9 r1 U3 N- o0 i
    ————————————————4 {2 u& O4 p8 w4 C  j; C
    版权声明:本文为CSDN博主「忧郁的白衬衫丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ A( N" w; }( Z- }3 u
    原文链接:https://blog.csdn.net/weixin_42816285/article/details/106403093
    # ^* c+ O- @% \) Q
    % M! A, Q+ R* |9 v& M( {( ~2 v8 B0 F7 A) q& ?
    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-7-25 05:59 , Processed in 0.371648 second(s), 56 queries .

    回顶部