无法运行 docker 映像 - app.jar 中没有主要清单属性 [重复]

Posted

技术标签:

【中文标题】无法运行 docker 映像 - app.jar 中没有主要清单属性 [重复]【英文标题】:Unable to run docker image - no main manifest attribute, in app.jar [duplicate] 【发布时间】:2015-09-13 18:33:40 【问题描述】:

无法运行构建的 docker 映像。当我使用命令运行时

docker run -p 8080:8080 -t image prefix name/image name

我收到一条消息"no main manifest attribute, in app.jar"

使用 docker-maven-plugin 并尝试显式调用主类的 maven-assembly-plugin。

docker version Boot2Docker 1.7.0

【问题讨论】:

能否将 app.jar 重命名为 app.zip,解压并查看清单? app.zip 的位置。在我的项目文件夹下,在 target/docker 文件夹下,我看到 2 个文件 couchboot-0.0.1-snapshot.jar 和 Dockerfile。 Docker 文件的内容如下。 FROM java:7 EXPOSE 8080 VOLUME /tmp ADD couchboot-0.0.1-snapshot.jar app.zip ENTRYPOINT ["java", "-jar", "app.zip"] 此时,你必须忘记 Docker,并查看生成的清单文件。 谢谢大卫。我撕开 pom.xml 并将其放回原处。现在我的清单文件看起来不错。但是,当我运行 docker 映像时,我遇到了以下问题。 WARN 1 --- [cb-io-1-1] c.c.client.core.endpoint.Endpoint:[null][KeyValueEndpoint]:无法连接到端点。 这能回答你的问题吗? Can't execute jar- file: "no main manifest attribute" 【参考方案1】:

Docker镜像内jar文件里面的manifest不包含你期望的,导致使用java -jar ...运行时启动失败

我建议你先在本地调试你的程序:

MANIFEST.MF 文件是否存在? 在您调用 java 时,它是否位于 JVM 预期的确切位置? MANIFEST.MF 文件中是否存在“Main-Class: classname”行? 类名是否与您要调用的类的名称完全相同? MANIFEST.MF 中给出的类路径是否符合您的预期? 要调用的类是否存在于该类路径中?

在https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html与朋友一起阅读官方Oracle文档中的更多详细信息。

【讨论】:

这已经在 Stack Overflow 上回答过好几次了。此处删除的两个答案中的一个也有相同的说法,它得到了两个反对票并且对您可见。 @howlger 如果你碰巧知道这个问题已经在 Stack Overflow 上被回答了好几次,那么选择最好的答案来关闭这个问题作为副本。 OP 也看不到已删除的答案。

以上是关于无法运行 docker 映像 - app.jar 中没有主要清单属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

由于出现此错误,无法运行 docker 容器:无法访问 jarfile app.jar

运行 Docker 映像时无法访问 jarfile

Docker - 无法连接到正在运行的映像

运行 docker 映像时无法访问 localhost:8080

用于 php 的 docker 映像无法在 Windows 10 的浏览器上运行

无法运行已在使用的 gitlab docker 映像端口