在 docker 容器中部署 .war 文件:app.war 中没有主要清单属性
Deploy .war file in docker container: No main manifest attribute in app.war
我有一个 java 应用程序的 .war 文件,我想将其部署到 docker 容器中。
我的 Dockerfile 如下所示:
FROM java:8
EXPOSE 8080
ADD /App.war app.war
ENTRYPOINT ["java", "-jar", "app.war"]
我的 App.war
在同一目录中。
当我想 运行 它时,使用以下命令:
docker run -p 8080:8080 -t app
它抛出以下异常:
no main manifest attribute, in app.war
然而,当我检查 app.war 时,/META-INF/MANIFEST.MF 中有一个清单,说明以下选项:
Manifest-Version: 1.0
Start-Class: com.package.app.AppMainClass
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
据我所知,错误消息指出清单中缺少 Main-Class 属性(这是不可能的,因为它就在那里)。
我还尝试将真实的 class 添加为 Main-Class。
这导致了同样的错误。
有人可以帮助我回到正轨吗?
首先不要像 WAR 一样构建 spring 引导项目。如果你有一些古老的项目迫使你将应用程序部署到网络 server/servlet 容器,你只需要 WAR。您需要从构建脚本中删除 war 相关逻辑。
第二。确保您正在正确构建项目。如果是gradle,你需要用./gradlew build
构建它,maven使用mvn package
。这会将您的存档打包为 uberjar - 包括所有需要的依赖项并制作正确的存档结构。
查找有关如何将 spring 引导应用程序放入 Docker in the user guides 的更多详细信息。
当且仅当由于一些奇怪的事件你需要将它构建为 WAR 和 运行 它作为一个可执行的存档确保你这样做 using the war-plugin provided by spring boot (不是内置的war 插件)。这是构建可执行文件 war 存档的唯一有效方法。
我有一个 java 应用程序的 .war 文件,我想将其部署到 docker 容器中。
我的 Dockerfile 如下所示:
FROM java:8
EXPOSE 8080
ADD /App.war app.war
ENTRYPOINT ["java", "-jar", "app.war"]
我的 App.war
在同一目录中。
当我想 运行 它时,使用以下命令:
docker run -p 8080:8080 -t app
它抛出以下异常:
no main manifest attribute, in app.war
然而,当我检查 app.war 时,/META-INF/MANIFEST.MF 中有一个清单,说明以下选项:
Manifest-Version: 1.0
Start-Class: com.package.app.AppMainClass
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
据我所知,错误消息指出清单中缺少 Main-Class 属性(这是不可能的,因为它就在那里)。 我还尝试将真实的 class 添加为 Main-Class。
这导致了同样的错误。
有人可以帮助我回到正轨吗?
首先不要像 WAR 一样构建 spring 引导项目。如果你有一些古老的项目迫使你将应用程序部署到网络 server/servlet 容器,你只需要 WAR。您需要从构建脚本中删除 war 相关逻辑。
第二。确保您正在正确构建项目。如果是gradle,你需要用./gradlew build
构建它,maven使用mvn package
。这会将您的存档打包为 uberjar - 包括所有需要的依赖项并制作正确的存档结构。
查找有关如何将 spring 引导应用程序放入 Docker in the user guides 的更多详细信息。
当且仅当由于一些奇怪的事件你需要将它构建为 WAR 和 运行 它作为一个可执行的存档确保你这样做 using the war-plugin provided by spring boot (不是内置的war 插件)。这是构建可执行文件 war 存档的唯一有效方法。