Docker 容器時間跟宿主機時間同步


k8s 中的yaml文件中掛載本地的localtime時間和宿主機進行同步

volumeMounts:
- name: tz-config
  mountPath: /etc/localtime
  readOnly: true

volumes:
- name: tz-config
  hostPath
     path: /etc/localtime
 1 宿主機時間
 2 [root@slave-1 ~]# date
 3 Fri May 12 11:20:30 CST 2017
 4  
 5 容器時間
 6 [root@slave-1 ~]# docker exec -ti 87986863838b /bin/bash
 7 root@87986863838b:/# date 
 8 Fri May 12 03:20:33 UTC 2017
 9  
10 發現兩者之間的時間相差了八個小時!
11 宿主機采用了CST時區,CST應該是指(China Shanghai Time,東八區時間)
12 容器采用了UTC時區,UTC應該是指(Coordinated Universal Time,標准時間)
13  
14 統一兩者的時區有下面幾種方法
15 1)共享主機的localtime
16 創建容器的時候指定啟動參數,掛載localtime文件到容器內,保證兩者所采用的時區是一致的。
17 # docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro  docker.io/nginx  /bin/bash
18  
19 2)復制主機的localtime
20 [root@slave-1 ~]# docker cp /etc/localtime 87986863838b:/etc/
21  
22 然后再登陸容器,查看時間,發現已經跟宿主機時間同步了
23 [root@slave-1 ~]# docker exec -ti 87986863838b /bin/bash
24 root@87986863838b:/# date                                                                                                                    
25 Fri May 12 11:26:19 CST 2017
26  
27 3)創建dockerfile文件的時候,自定義該鏡像的時間格式及時區。在dockerfile文件里添加下面內容:
28 ......
29 FROM tomcat
30 ENV CATALINA_HOME /usr/local/tomcat
31 .......
32 #設置時區
33 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
34 ......
35  
36 保存后,利用docker build命令生成鏡像使用即可,使用dockerfile創建的鏡像的容器改變了容器的時區,
37 這樣不僅保證了容器時間與宿主機時間一致(假如宿主機也是CST),
38 並且像上面使用tomcat作為父鏡像的話,JVM的時區也是CST,這樣tomcat的日志信息的時間也是和宿主機一致的,
39 像上面那兩種方式只是保證了宿主機時間與容器時間一致,JVM的時區並沒有改變,tomcat日志的打印時間依舊是UTC。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM