我将应用程序升级到 Spring Boot 3.4,健康检查不再起作用。我需要做哪些更改才能使健康检查再次起作用?
日志
如果我调用docker container inspect
,我会看到以下健康检查日志:
"Health": {
"Status": "unhealthy",
"FailingStreak": 6,
"Log": [
{
"Start": "2025-02-10T09:12:40.658415283Z",
"End": "2025-02-10T09:12:40.716595544Z",
"ExitCode": -1,
"Output": "OCI runtime exec failed: exec failed: unable to start container process: exec: \"/bin/sh\": stat /bin/sh: no such file or directory: unknown"
},
配置
<configuration>
<image>
<env>
<BP_SPRING_CLOUD_BINDINGS_DISABLED>true</BP_SPRING_CLOUD_BINDINGS_DISABLED>
<BP_HEALTH_CHECKER_ENABLED>true</BP_HEALTH_CHECKER_ENABLED>
<BPE_LANG>en_US.UTF-8</BPE_LANG>
</env>
<buildpacks>
<buildpack>gcr.io/paketo-buildpacks/adoptium</buildpack>
<buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
<buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack>
</buildpacks>
<createdDate>${maven.build.timestamp}</createdDate>
</image>
</configuration>
<goals>
<goal>build-image-no-fork</goal>
</goals>
命令
我在docker container run
命令中添加了健康检查参数:
--health-cmd /workspace/health-check
--health-interval 1m
--env THC_PORT=8081
--env THC_PATH=/health
另请参阅:如何使用 Spring Boot 3.3 设置 THC_PORT 和 THC_PATH?
研究
用于构建 OCI 镜像的 Paketo tiny Builder
spring-boot:build-image
使用 Maven目标或 Gradle任务为 JVM 应用程序构建 OCI 映像时使用的默认 Cloud Native Buildpacks 构建器bootBuildImage
已从 更改为paketobuildpacks/builder-jammy-base
。paketobuildpacks/builder-jammy-java-tiny
这应该会导致映像变小。tiny
构建器不包含 shell,因此它可能不适用于需要启动脚本来运行应用程序的应用程序。它还包括一组精简的系统库,根据您的应用程序,这些库可能无法满足其需求。有关自定义构建器的信息,请参阅 Maven 或 Gradle 文档。
因此,图像中不再有 shell。这与日志相符。
我读过《打包 OCI 图像》,但我不明白我需要改变什么。
问题
我需要在 Spring Boot Maven 配置中进行哪些更改才能使健康检查再次正常工作?