Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在docker映像上运行.jar文件失败,错误为“0”;错误:无法访问jarfile.jar";_Python_Docker - Fatal编程技术网

Python 在docker映像上运行.jar文件失败,错误为“0”;错误:无法访问jarfile.jar";

Python 在docker映像上运行.jar文件失败,错误为“0”;错误:无法访问jarfile.jar";,python,docker,Python,Docker,因此,为了在Kubuntu 20.04.1 LTS中构建一个.jar文件,我遵循了这个示例/教程: 我成功地在Kubuntu上运行了.jar文件。然后使用以下命令创建Dockerfile: FROM java:8-jdk-alpine WORKDIR /home/UbuntuUser/Desktop/docker/test_jar/ EXPOSE 8080 ENTRYPOINT ["java", "-jar", "tecmintapp.jar&q

因此,为了在Kubuntu 20.04.1 LTS中构建一个.jar文件,我遵循了这个示例/教程:

我成功地在Kubuntu上运行了.jar文件。然后使用以下命令创建Dockerfile:

FROM java:8-jdk-alpine
WORKDIR /home/UbuntuUser/Desktop/docker/test_jar/
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "tecmintapp.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
它成功构建,然后尝试使用以下命令运行它:

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
也许我错过了一些东西,但你觉得这些东西有什么不对吗?码头工人为什么不跑

更新: @Hussain Bohra&@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内部使用openjdk:14的
,您需要将jar从本地机器复制到容器中。像“COPY tecminapp.jar/home/UbuntuUser/Desktop/docker/test\u jar/tecminapp.jar”
/home/UbuntuUser/Desktop/docker/test\u jar/
是本地机器上的一个目录。它不存在于图像/容器中,并且无法从运行的容器访问其内容。如上所述,您需要在图像中复制文件。让您走上正轨的快速修复方法:删除
WORKDIR….
行,将其替换为
COPY-tecminapp.jar.
。然后再次构建映像并(尝试)运行它。您可能需要花更多的时间了解docker关键概念。一个很好的起点:我已经更新了第一篇帖子。。。有没有办法解决这个问题??