Docker中部署springboot时间不对的问题

  1. 问题回顾:
    在centos上打包springboot应用,启动镜像发布以后,执行定时任务是发现时间不对,相差了8个小时。
    查询数据库数据发现时间也相差了8个小时,但是数据库中时间是正确的。
    系统日志打印时间居然也相差了8个小时。
  2. 解决路程:

    A:首先查询服务器时间是否正确。执行命名:
    date

    发现系统时间正确,并且时区为CST。
    B:进入容器内部,检查容器时间是否正确。
    进入容器内部:

    docker exec -it [containerId] sh

    执行命令:

    date

    发现容器内时间不对,相差8小时,并且时区为UTC。

  3. 停止容器,删除容器和镜像。

  4. 为了保证容器时区和系统时区相同,需要挂载docker的/etc/localtime到系统的/etc/localtime。
    修改docker-compose.yml:

    volumes:
      - /etc/localtime:/etc/localtime

    或者在Dockfile中新增命令:
     

    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

     

  5. 重新build镜像,启动之后,进入容器检查时间已经正确。

  6. 到此居然天真的以为万事大吉...But查询数据库的数据页面显示居然还是相差了8个小时,检查jdbc url发现时区参数【

    serverTimezone=GMT%2B8】已经进行了配置。心中一万个CNM呼啸而过...
  7. 查询log日志发现,居然日志时间也是相差了8个小时。冷静之后分析应该是JVM的时区不对。JVM是通过/etc/timezone文件获取时区的,需要在容器中映射或者写入时区文件。在Dockfile中新增命令:
    RUN echo "Asia/Shanghai" > /etc/timezone

    再次查询系统log文件和查询数据时间,显示正确!

  8. 最终Dockfile如下:
     

    FROM openjdk:8u181-jdk
    MAINTAINER JasonJiang jasonjiang@xxx.com
    
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo "Asia/Shanghai" > /etc/timezone
    
    COPY target/xxx.jar /xxx.jar
    
    ENTRYPOINT ["java", "-jar", "/xxx.jar"]

     

您可以按照以下步骤使用 Docker 部署 Spring Boot 应用程序: 1. 首先,确保您已经安装了 Docker。您可以在终端中运行 `docker --version` 命令来验证安装是否成功。 2. 创建一个 Dockerfile,用于构建 Docker 镜像。在项目的根目录下创建一个名为 `Dockerfile` 的文件,并将以下内容添加到文件中: ``` FROM adoptopenjdk:11-jre-hotspot WORKDIR /app COPY target/your-application.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"] ``` 确保将 `your-application.jar` 替换为您的 Spring Boot 应用程序的实际 JAR 文件名。 3. 使用 Maven 或 Gradle 构建您的 Spring Boot 应用程序,并将 JAR 文件生成到 `target` 目录中。 4. 在终端中进入到项目的根目录,并使用以下命令构建 Docker 镜像: ``` docker build -t your-image-name . ``` 确保将 `your-image-name` 替换为您想要给镜像起的名称。 5. 构建完成后,您可以使用以下命令运行 Docker 容器: ``` docker run -p 8080:8080 your-image-name ``` 其中 `-p` 参数用于将容器内部的 8080 端口映射到主机上的 8080 端口。 现在您的 Spring Boot 应用程序应该已经在 Docker 容器中成功运行了。您可以通过访问 `http://localhost:8080` 在本地主机上访问它。请注意,如果您在 Docker Toolbox 等虚拟机环境中运行 Docker,您可能需要使用虚拟机的 IP 地址来访问应用程序。 希望对您有所帮助!如有任何进一步的问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值