java程序在Docker 容器时间不正确, 差8h

在使用docker容器部署的应用,可能会出现时间与主机不一致的情况
首先排查: 宿主机时间与docker 容器里的时间是否一致:

一、若不一致

容器时间与主机差8个小时:主机的与容器的/etc/localtime不一致
解决方法:挂载主机的/etc/localtime,如果没有则cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

二、若一样, 但是 java 程序查询出的时间仍然不正确

如果里面运行的是java程序,哪么程序时间还是会8个小时的差别:主要是Java或取时间是从/etc/timezone里获取时区
解决方法:
(1) 挂载主机的/etc/timezone,如果没有则新建echo "Asia/shanghai" > /etc/timezone;
示例:
docker-compose.yml , volumes 添加 - /etc/timezone:/etc/timezone:ro:

#==============================================服务类==============================================
#======================== audit-service ========================   
  audit-service:
   #指定容器名
   container_name: audit-service
   #指定镜像
   image: 192.168.0.155:9122/audit-service:1.2.0
   #重启策略
   restart: always
   #指定host端口映射到container的端口
   ports:
   - 9193:9193
   - 5559:5009
   #配置写入环境变量
   environment:
       APP_NAME: audit-service
       NACOS_DISCOVERY_SERVER_ADDR: 192.168.0.139
       NACOS_DISCOVERY_SERVER_PORT: 8849
       NACOS_DISCOVERY_NAMESPACE: 3797b282-5518-46ea-8e05-e5b4ac5f9fcc
       NACOS_CONFIG_SERVER_ADDR: 192.168.0.139
       NACOS_CONFIG_SERVER_PORT: 8849
       NACOS_CONFIG_NAMESPACE: 3797b282-5518-46ea-8e05-e5b4ac5f9fcc
       NACOS_CONFIG_FILE_EXTENTION: properties
       NACOS_CONFIG_SHARED_DATAIDS: common-actuator-endpoint.yaml,common-mongo.properties,feign.yaml,redisson.yaml
       NACOS_CONFIG_REFRESHABLE_DATAIDS: common-actuator-endpoint.yaml,,common-mongo.properties,feign.yaml,redisson.yaml
   volumes:
     - /etc/localtime:/etc/localtime:ro
     - /etc/timezone:/etc/timezone:ro
   networks:
     - sk-net

(2) 通过jvm参数将时区信息传进jvm里:-Duser.timezone=GMT+08;

你可能感兴趣的:(java程序在Docker 容器时间不正确, 差8h)