centos時區 & docker容器時區 & jvm時區問題 & logs時間錯誤


現象:

在通過部署項目到服務器時, 發現服務器和本地查詢結果不一致, 服務器應用程序的log時間錯誤.
本地和服務器的log時間對比如下:

  • 服務器內docker容器的應用程序(JVM)的log時間:
2018-08-21 15:23:04.188 [http-nio-10021-exec-3] INFO  com.vdp.core.component.mongo.MongoService - DBName[gdcp],CollectionName[RTINFO],操作[查詢query sort],查詢出來的數量[0], 排序[{ "TIME" : -1}], 參數[{ "DEVCODE" : "LY16C1237G0001283" , "ShuChiCanData" : { "$exists" : false} , "TIME" : { "$gte" : { "$date" : "2018-03-25T00:00:00.000Z"} , "$lte" : { "$date" : "2018-03-25T00:03:00.000Z"}}}]   
  • 本地win10:
2018-08-21 23:22:59.380 [http-nio-10021-exec-1] INFO  com.vdp.core.component.mongo.MongoService - DBName[gdcp],CollectionName[RTINFO],操作[查詢query sort],查詢出來的數量[8], 排序[{ "TIME" : -1}], 參數[{ "DEVCODE" : "LY16C1237G0001283" , "ShuChiCanData" : { "$exists" : false} , "TIME" : { "$gte" : { "$date" : "2018-03-24T16:00:00.000Z"} , "$lte" : { "$date" : "2018-03-24T16:03:00.000Z"}}}]   

通過在啟動jar時指定jvm的時區解決問題.

總結時區操作的如下方法:

修改centos7的時區:

查看系統的時區:

[root@localhost ~]# date  
Wed Aug 22 09:49:56 CST 2018  

CST是為美國、澳大利亞、古巴或中國的標准時間. 如果不是CST那么肯定時區錯誤. 再查看和當前時間是否一致, 如果不一致也可以判斷為時區錯誤, 可以通過如下命令修改時區:

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

修改容器時區:

docker容器啟動后, 可以通過命令:docker exec -it 64163d31888d bash進入容器, 容器時區不對, 通過在dockerfile添加如下配置解決:

    volumes:  
      - /etc/localtime:/etc/localtime  
    privileged: true  

完整的dockerfile實例如下:

version: '3'
networks:
  docker_vdp-network:
    external: true
services:
  dqs-servier1:
    image: XX.XX.187.150:8082/vdp/vdp-cloud-dqs:0.0.1
    networks:
      - docker_vdp-network
    volumes:
      - /etc/localtime:/etc/localtime
    privileged: true
    ports:
      - "10021:10021"

啟動jar的時候指定時區:

在我們運行應用程序時,可能JVM的時區和系統的時區不一致, 那么在執行java -jar的時候添加參數-Duser.timezone=GMT+08.
下面的在dockerfile中啟動應用程序的示例:

#docker search jdk找到的最小jdk基礎鏡像
FROM airdock/oracle-jdk
VOLUME /tmp
ADD vdp-cloud-dqs-1.0.0-SNAPSHOT.jar /app.jar
EXPOSE 10021
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/app.jar"]


免責聲明!

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



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