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

Spring Boot War包在Docker容器Tomcat中部署异常:Dockerfile是否有误?

在Docker容器的Tomcat中部署Spring Boot War包的问题排查与解决

一、Dockerfile的调整建议

你的Dockerfile语法本身没有错误,但可以优化以简化访问路径:

FROM tomcat:9
# 将War包重命名为ROOT.war,可通过根路径直接访问
COPY ATI-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]

二、核心排查与解决步骤

1. 确认Spring Boot War包的部署配置是否正确

Spring Boot默认是内置Tomcat的Jar包,要部署到外部Tomcat必须完成以下配置:

  • 修改pom.xml,将<packaging>jar</packaging>改为<packaging>war</packaging>
  • 添加Servlet API依赖(设置为provided避免与Tomcat内置组件冲突):
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
  • 创建继承SpringBootServletInitializer的子类,覆盖configure方法:
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }
}

若未完成上述配置,Tomcat无法正确识别并启动你的War包。

2. 验证容器内的部署状态

  • 启动容器时必须做端口映射,否则外部无法访问:
docker run -d -p 8080:8080 <你的镜像ID/名称>
  • 进入容器查看webapps目录内容,确认War包是否被解压:
docker exec -it <容器ID> bash
ls /usr/local/tomcat/webapps/

如果能看到解压后的ATI-0.0.1-SNAPSHOT(或ROOT)目录,说明Tomcat已识别War包;若仅存在War文件无解压目录,说明War包本身存在问题,Tomcat无法解压启动。

3. 查看Tomcat详细启动日志

直接查看容器内的Tomcat日志,定位具体错误:

docker logs <容器ID>

重点关注SEVERE级别的报错,比如类缺失、配置文件错误等,这些会直接导致War包启动失败。

三、正确访问路径说明

  • 若保留原War包名称,访问路径为:http://localhost:8080/ATI-0.0.1-SNAPSHOT/(注意末尾斜杠,端口需与映射的一致)
  • 若重命名为ROOT.war,访问路径简化为:http://localhost:8080/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:18