You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pack build构建Spring Boot镜像遇404,bootBuildImage则正常

解决pack build构建Spring Boot WAR镜像出现Tomcat 404的问题

核心解决方案

让pack build和./gradlew bootBuildImage使用完全一致的Buildpack集合,有两种实现方式:

方式1:命令行直接指定

执行pack build时,显式指定Spring Boot专属Buildpack,避免自动选择多余的gradle、apache-tomcat Buildpack:

pack build <你的镜像名称> --builder paketobuildpacks/builder-jammy-base:latest --buildpack gcr.io/paketo-buildpacks/spring-boot

方式2:固化配置到项目文件

在项目根目录创建project.toml,写入以下内容,后续直接执行pack build <你的镜像名称>即可:

[build]
builder = "paketobuildpacks/builder-jammy-base:latest"
buildpacks = ["gcr.io/paketo-buildpacks/spring-boot"]

问题根源

  • bootBuildImage是Spring Boot Gradle插件封装的命令,它会自动适配Spring Boot项目,只加载Spring Boot专属Buildpack——这个Buildpack会把WAR包嵌入到Spring Boot自带的嵌入式Tomcat中,确保DemoController的路径能被正确识别。
  • 原生pack build默认会扫描所有可用Buildpack,误选了gradle Buildpack(用于源码构建)和独立apache-tomcat Buildpack(用于传统WAR部署)。独立Tomcat部署时会将WAR包解压到特定上下文路径,导致根路径/无法匹配到你的DemoController,出现404。

验证方法

  • 构建完成后,执行pack inspect-image <你的镜像名称>,查看Buildpack列表,确认只有Spring Boot Buildpack存在。
  • 启动镜像后,检查日志,确认启动的是org.springframework.boot.web.embedded.tomcat.TomcatWebServer,而非独立Tomcat进程。

内容的提问来源于stack exchange,提问作者Federico Nafria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:52:05