在 docker 映像上运行.jar文件失败,错误:"Error: Unable to access jarfile file.jar"



因此,我按照这个示例/教程在Kubuntu 20.04.1 LTS中构建了一个.jar文件:https://www.tecmint.com/create-and-execute-jar-file-in-linux/

我成功地在Kubuntu上运行了.jar文件。然后我用以下命令制作一个Dockerfile:

FROM java:8-jdk-alpine
WORKDIR /home/UbuntuUser/Desktop/docker/test_jar/
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "tecmintapp.jar"]

通过修改本教程:

在docker镜像中运行jar文件

我用这个命令构建docker镜像:

sudo docker build -t test-docker .

它成功构建,然后尝试使用以下命令运行它:

UbuntuUser@ubuntu:~/Desktop/docker/test_jar/$ sudo docker run test-docker
Error: Unable to access jarfile tecmintapp.jar

在";test_jar";文件夹我有这些文件:

TecmintApp.java
tecmintapp.jar
TecmintApp.class
MANIFEST.MF
Dockerfile

也许我错过了什么,但你看到这些有什么不对吗?码头工人为什么不上班?

更新:@侯赛因·波拉&Zeitounator:我已经按照你的建议做了,我正确地构建了它,但当尝试运行它时,我得到了这个错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: TecmintApp has been compiled by a more recent version of the Java Runtime (class file version 58.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

我做了一次检查,这是我得到的反馈,我看不出包的版本有什么不同:

$ java -version  
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 14.0.2+12-Ubuntu-120.04, mixed mode, sharing)
$ javac -version
javac 14.0.2

解决方案:它需要Dockerfile 中的FROM openjdk:14-alpine

相关内容

最新更新