Azure WebApps Tomcat应用更新Docker镜像后无法自动重启报HTTP 404
解决方案
核心问题定位
微软更新后的mcr.microsoft.com/azure-app-service/tomcat:8.5-jre8_220406005815镜像调整了应用目录同步逻辑,不再自动将/home/site/wwwroot/webapps/下的自定义子目录(如wholesale)复制到容器内的/usr/local/tomcat/webapps/路径,仅默认加载ROOT应用,导致部署成功后Tomcat无法识别你的应用。
方案1:直接映射部署目录(推荐)
无需复制文件,让Tomcat直接加载持久化存储中的应用目录:
- 登录Azure门户,进入你的App Service,打开配置 -> 路径映射
- 点击添加虚拟应用程序:
- 虚拟路径:
/wholesale - 物理路径:
site/wwwroot/webapps/wholesale - 勾选应用程序选项
- 虚拟路径:
- 保存配置后重启App Service,Tomcat会直接读取
/home/site/wwwroot/webapps/wholesale中的应用文件,无需复制到容器内部。
方案2:自定义启动脚本强制复制
通过启动命令在容器初始化时自动同步目录:
- 进入App Service的配置 -> 常规设置
- 在启动命令中填入:
bash -c "mkdir -p /usr/local/tomcat/webapps/wholesale && cp -r /home/site/wwwroot/webapps/wholesale/* /usr/local/tomcat/webapps/wholesale/ || true && catalina.sh run" - 保存后重启,每次容器启动都会先确保目标目录存在,再同步应用文件,最后启动Tomcat。
|| true避免因目录不存在导致启动失败。
方案3:修改Tomcat配置文件
手动调整Tomcat的server.xml或context.xml,指定应用路径:
- 通过Kudu工具(
https://<你的应用名>.scm.azurewebsites.net/)进入容器,编辑/usr/local/tomcat/conf/server.xml - 在
<Host>节点内添加:<Context path="/wholesale" docBase="/home/site/wwwroot/webapps/wholesale" reloadable="true" /> - 保存后重启Tomcat,应用会直接加载指定路径的文件。注意:若镜像更新,此配置可能被覆盖,建议将自定义配置文件挂载到持久化存储中。
方案4:临时回退镜像版本(应急用)
如果需要快速恢复服务,可暂时指定旧版本镜像:
- 在App Service的配置 -> 常规设置中,将Docker镜像改为之前正常运行的版本(例如旧的标签号)
- 保存后重启,待后续适配新镜像后再切换回来。
内容的提问来源于stack exchange,提问作者Tanguy Couery LTR
相关产品推荐
相关产品推荐

