我对下面的春季启动应用程序有问题,我需要包含一个春季启动应用程序在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"]
你正在使用旧的jvm版本在你的docker基础映像openjdk:alpine
java 8我猜,你需要使用java 11至少,使用此标记openjdk:11.0.12-jre
代替,或者搜索等效的alpine版本。
这是java版本及其类版本号列表java类文件格式主要版本号列表?
看起来您正在使用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