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"]

转载于:https://www.cnblogs.com/lognxn/p/9516027.html

创建一个CentOS镜像的Docker容器通常是为了方便管理和复用具有特定操作系统环境的应用程序。以下是一般的步骤: 1. **安装Docker**:首先确保你的系统已经安装了Docker。如果是Windows或Mac用户,可以从Docker官网下载并安装。 2. **准备基础镜像**:你可以基于官方的CentOS Docker镜像(`centos:latest` 或指定版本)开始。例如,命令行中可以这样拉取: ``` docker pull centos:7 ``` 3. **创建一个新的Dockerfile**:在你的项目目录下创建一个名为 `Dockerfile` 的文件,这个文件会告诉Docker如何构建你的镜像。基本内容可能包括设置工作目录、安装依赖等。例如: ```Dockerfile FROM centos:7 RUN yum update -y && \ yum install -y your_required_packages COPY . /app WORKDIR /app CMD [ "your_command_to_run" ] ``` 这里你需要替换 `your_required_packages` 和 `your_command_to_run` 为实际需求。 4. **构建镜像**:在终端或命令提示符中,导航到包含 `Dockerfile` 的目录,然后运行: ``` docker build -t my-centos-image . ``` 这将根据Dockerfile中的指示构建新的镜像,标签 (`my-centos-image`) 可以自定义。 5. **运行容器**:如果你想要测试新镜像,可以运行一个容器: ``` docker run -it --name my-container my-centos-image ``` `-it` 表示交互式模式,`--name` 设置容器名称。 6. **保存和推送镜像**:如果想持久化存储,可以使用 `docker save` 命令保存镜像到本地,然后使用 `docker push` 将其推送到Docker Hub或其他仓库。 相关问题: 1. 在Dockerfile中,COPY命令的作用是什么? 2. 如何在Docker容器中配置长期运行的服务? 3. 如何查看已构建好的Docker镜像?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值