Docker部署Web应用无法设置根上下文路径问题求助
Tomcat部署WAR包无法设置为根路径问题
现状
- 多阶段Docker构建后,通过以下命令将WAR包复制到Tomcat的
webapps目录:COPY --from=builder /app/target/*.war $CATALINA_HOME/webapps/ - 项目生成的WAR包名为
servletjdbc-1.0-SNAPSHOT.war,当前访问路径:http://localhost:8080/servletjdbc-1.0-SNAPSHOT/http://localhost:8080/servletjdbc-1.0-SNAPSHOT/firstTest
- 期望用根路径访问:
http://localhost:8080/http://localhost:8080/firstTest
无效尝试及错误
尝试在web.xml中添加以下配置时触发XML语法错误:
<context-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </context-param>
错误提示:
Element
param-nameis not allowed here
Elementparam-valueis not allowed here
当前web.xml内容:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"> </web-app>
解决方法
方法1:重命名WAR包为ROOT.war(推荐)
Tomcat默认将webapps/ROOT.war识别为根上下文应用,只需修改Docker复制命令,把WAR包重命名为ROOT.war:
COPY --from=builder /app/target/servletjdbc-1.0-SNAPSHOT.war $CATALINA_HOME/webapps/ROOT.war
如果不想硬编码文件名,可通过以下方式处理:
# 复制到临时文件后重命名 COPY --from=builder /app/target/*.war $CATALINA_HOME/webapps/temp.war RUN mv $CATALINA_HOME/webapps/temp.war $CATALINA_HOME/webapps/ROOT.war
方法2:添加Tomcat上下文配置文件
在Tomcat的conf/Catalina/localhost目录下创建ROOT.xml,内容如下:
<Context docBase="$CATALINA_HOME/webapps/servletjdbc-1.0-SNAPSHOT.war" reloadable="true"/>
在Docker中通过COPY命令添加该文件:
COPY ROOT.xml $CATALINA_HOME/conf/Catalina/localhost/ROOT.xml
关于web.xml错误的说明
你添加的<context-param>标签位置本身合法,但contextConfigLocation是Spring框架的配置参数,和原生Servlet的上下文路径设置无关,完全不需要添加。错误大概率是IDE语法检查的误报,或者XML缩进格式问题,但这个配置对你的需求没有帮助。
内容的提问来源于stack exchange,提问作者DoWhileFor
相关产品推荐
相关产品推荐

