当JAR包含.profile.d脚本时,将JAR推送到Cloud Foundry会失败

时间:2015-12-01 17:55:29

标签: cloudfoundry buildpack

我使用assemble任务打包了Gradle的Java Spring Boot应用程序。当我把它的罐子推到CF时它工作得很好 - 部署和启动。

现在,当我将位于.profile.d文件夹中的bash脚本添加到此jar时,我遇到了问题。我看到脚本成功执行(打印消息),但应用程序无法启动。我没有看到任何有关任何错误的信息,甚至没有尝试启动。我收到的唯一消息(在看到来自bash脚本的输出之后)是“未能接受运行状况检查超时内的连接”并且它在超时后发生。我正在为这个应用使用env变量JBP_LOG_LEVELDEBUG

相同的脚本在Python buildpack中运行良好(已执行,app已启动并运行)。

我在2个月前的版本中使用过Java buildpack,并且还在GIT存储库中尝试了最新版本。你知道它可能是什么原因吗?甚至我该怎么调试呢?

1 个答案:

答案 0 :(得分:0)

Java Buildpack不支持使用.profile.d脚本进行启动。 buildpack创建了非常复杂的命令行,如下所示

CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.1_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) && JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n" && SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/.:$PWD/.java-buildpack/spring_auto_reconfiguration/spring_auto_reconfiguration-1.10.0_RELEASE.jar org.springframework.boot.loader.JarLauncher

解决从内存区域分配,错误处理,支持的功能(在这种情况下调试),类路径等所有内容。因为此命令行对于平台上Java应用程序的预期功能至关重要,所以使用其他启动脚本覆盖它尽管可能,但我们不支持。

正如您在帖子开头指出的那样,buildpack运行您的应用程序而没有此脚本,这是我们的目标;用户应该能够推送一个应用程序,并且它只是工作"。如果您的应用程序存在某些阻止其在Cloud Foundry环境中正常运行的情况,我建议您open an issue对抗buildpack,以便我们能够解决它。

要解决手头的问题,Cloud Foundry中的运行状况检查失败通常意味着应用程序不接受容器指定的端口上的HTTP连接。您需要确保应用程序在启动时侦听$PORT指示的端口。