无法运行 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 映像时无法访问 localhost:8080