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

主机Postman请求无法访问Docker容器内运行的Tomcat服务器

多阶段构建Dockerfile导致Tomcat返回404问题排查与解决

问题核心原因

你遇到的问题根源是多阶段构建中Maven阶段的源码复制路径错误,破坏了Maven需要的标准项目结构,导致生成的WAR包无效,Tomcat无法正确部署,最终返回404错误。

看你多阶段Dockerfile里的这段代码:

# copy source files
COPY src .

这条命令会把本地src目录下的所有文件直接丢进容器工作目录/usr/var/app里,而不是创建/usr/var/app/src子目录。Maven构建依赖src/main/java、src/main/resources这类标准结构,源码路径乱了之后,Maven根本没法正常编译打包,生成的WAR包要么是空的,要么是不符合Tomcat部署要求的无效包。

而你本地构建时是在正确的项目结构下执行Maven命令,所以生成的WAR包是正常的,直接复制到Tomcat容器就能跑起来。

解决方案

修改Maven阶段的源码复制命令,把本地src目录完整复制到容器工作目录的src子目录下:

# copy source files
COPY src ./src

修改后的完整多阶段Dockerfile:

# get maven image
FROM maven:3.9.6-eclipse-temurin-17-alpine AS maven

# set working directory
WORKDIR /usr/var/app

# copy project management file (POM.XML)
COPY pom.xml .

# 修正:完整复制src目录到容器工作目录的src子目录
COPY src ./src

# build project
RUN ["mvn", "clean", "install"]

# get tomcat image
FROM tomcat:10.1.19 AS server

# set work directory
WORKDIR /usr/local/tomcat/webapps

# copy war file into the tomcat webapps
COPY --from=maven /usr/var/app/target/*.war .

# expose port
EXPOSE 8080

# run tomcat server
CMD ["catalina.sh", "run"]

验证步骤

  1. 重新构建镜像(注意命令末尾的.,这是指定Docker构建上下文,不能漏):
    docker build -t tmr-app .
    
  2. 运行容器:
    docker run -it --rm -p 8080:8080 tmr-app
    
  3. 查看Tomcat启动日志,确认WAR包被正常解压部署后,再用Postman测试接口即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:57:33