在使用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;