【问题标题】:Run docker contianer with Spring Boot App使用 Spring Boot App 运行 docker 容器
【发布时间】:2021-11-12 01:58:27
【问题描述】:

我下面的spring boot应用有问题,我需要包含一个spring boot应用才能在mac上本地运行它,为此我编写了如下所示的dockerfile,容器图像生成正确但是当我把它在运行中我有以下错误,这是什么原因造成的,这可能是什么? 要做到这一切,我使用下面的 shell 文件,我该如何修复错误?

错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/reportserver/report/ReportApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)

docker.sh:

#!/bin/bash
#define docker name
dockername=quote
#Delete all containers and all volumes
docker system prune -a
#Build of container and image
docker build -t $dockername .
#Run container
docker run --publish 8081:8081 $dockername

Dockerfile:

FROM openjdk:alpine
EXPOSE 8081
ARG JAR_FILE=target/report-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

【问题讨论】:

  • 看来编译用的JDK版本和容器的jdk有区别。尝试在Dockerfile中指定相同版本的openjdk,如openjdk:18-jdk-alpine3.13

标签: spring spring-boot docker shell


【解决方案1】:

我猜你在你的 docker 基础镜像openjdk:alpine java 8 中使用的是旧的 jvm 版本,你至少需要使用 java 11, 请改用此标签 openjdk:11.0.12-jre 或搜索等效的 alpine 版本。

这里是 java 版本列表及其类版本号List of Java class file format major version numbers?

【讨论】:

    【解决方案2】:

    看起来您正在使用 java 11 在系统中构建 jar 文件。

    在您的 docker 文件中,它使用 java 8 来运行 jar。

    改为对您的 Dockerfile 执行此操作。

    FROM openjdk:11-slim
    EXPOSE 8081
    ARG JAR_FILE=target/report-0.0.1-SNAPSHOT.jar
    ADD ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    从官方 github 文档来看,openjdk 仍然不完全支持 alpine 作为基础操作系统。 “-slim” 版本将使用 debian。

    Alpine 的 OpenJDK 端口不在 OpenJDK 支持的版本中,因为它不在主线代码库中。它仅作为 OpenJDK Project Portola 的早期访问版本提供。另请参阅此评论。因此,此图像遵循 OpenJDK 项目维护者提供的图像。

    您可以通过以下链接浏览标签列表及其详细信息。

    https://github.com/docker-library/docs/blob/master/openjdk/README.md#supported-tags-and-respective-dockerfile-links

    【讨论】:

    • 使用您的解决方案我在启动时遇到以下错误:上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'org.springframework.boot 的 bean 时出错.autoconfigure.orm.jpa。 HibernateJpaConfiguration ':通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名称为 'dataSource' 的 bean 时出错 [
    • 看起来 dataSource bean 创建失败。如果不查看代码,就无法说出这里的确切问题。 1. 是否遗漏了任何属性文件? 2. 你能在本地运行 JAR 吗? 3. 如果不能,你可以分享你的代码库吗? @riki
    猜你喜欢
    • 2018-11-28
    • 2018-07-11
    • 2018-08-16
    • 2022-01-09
    • 2019-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多