我有一个非常简单的java spring应用程序。当我从源生成图像时,使用:
pack build testapp:0.0.1 --builder paketobuildpacks/builder:base
然后尝试使用docker运行它,我得到以下错误:
ERROR: failed to launch: determine start command: when there is no default process a command is required。
此图像中生成的入口点是"/cnb/lifecycle/launcher"。
当我使用pack inspect-image检查图像时,没有进程。
我在不同的java spring-boot gradle应用程序中尝试了这种方法。当我使用"bootBuildImage“级任务时,它做的几乎是一样的,但是使用了预构建的..jar文件,并且结果映像工作。该图像中生成的入口点是"/cnb/process/web",pack inspect-image显示了三个进程。
有什么想法吗?
发布于 2022-02-28 13:59:47
我看不到你的构建输出,但听起来你好像遇到了一个已知的问题。如果这不是您的问题,请包括运行pack build的全部输出。
在这个问题上。默认情况下,项目将同时构建一个可执行的和不可执行的JAR。因为这会产生两个JAR文件,所以它目前混淆了buildpack。
有几种解决方案:
build.gradle文件中添加以下内容来做到这一点:
jar { enabled = false }
这就是我们有在Paketo构建包示例中使用的解决方案。pack build添加以下参数:-e BP_GRADLE_BUILT_ARTIFACT=build/libs/<your-jar>.jar。例如:-e BP_GRADLE_BUILT_ARTIFACT=build/libs/demo-0.0.1-SNAPSHOT.jar。您可以在这里使用glob样式的模式匹配,但是您需要确保输入的内容与*-plain.jar不匹配。这将是默认构建的不可执行的JAR。
这个选项只是简单地告诉Gradle buildpack,更具体地说,JAR文件要传递给后续的buildpack。我们还有一个尚未解决的问题,应该有助于减轻这一问题。当使用可执行-jar构建包获得了对多个jar的支持。时,不太可能需要设置它。实质上,该填充将添加支持,以便可执行JAR构建包能够检查和检测可执行JAR,这将允许它抛出-plain.jar文件,因为它是不可执行的。
https://stackoverflow.com/questions/71265067
复制相似问题