Docker部署Tomcat启动成功后访问站点返回404错误是什么原因?
Docker部署Tomcat站点访问返回404问题排查
问题背景
你提供的Dockerfile内容如下:
FROM tomcat ADD . ./webapps EXPOSE 1234 CMD ["catalina.sh", "run"]
构建日志显示镜像构建、容器部署流程均正常,但访问http://192.168.99.100:1234/index返回404错误,常见原因如下:
具体原因及修复方案
- Tomcat默认端口不匹配
官方Tomcat镜像默认服务监听端口为8080,Dockerfile中的EXPOSE 1234仅为端口声明,不会修改Tomcat自身的监听配置,容器内Tomcat实际运行在8080端口。如果启动容器时端口映射配置为1234:1234,则无法访问到Tomcat服务。
修复方案:启动容器时添加参数-p 1234:8080,将宿主机1234端口映射到容器内Tomcat默认的8080端口;也可以修改Tomcatconf/server.xml配置文件,将监听端口改为1234后再做对应映射。 - 站点文件部署路径错误
从构建日志可以看到实际执行了WORKDIR usr/local/tomcat/webapps+COPY . .操作,路径问题通常有两种情况:- 新版官方Tomcat镜像默认
webapps目录为空,默认站点文件存放在webapps.dist目录,未迁移文件直接访问会返回404 - 自定义站点资源如果直接放在
webapps根目录,需要存放在ROOT子目录内才能通过站点根路径访问:如果你的首页文件是index.html,放在webapps/ROOT下需要访问/index.html路径,而非/index;如果站点资源存放在webapps/index子目录,才能通过/index路径访问
- 新版官方Tomcat镜像默认
- 端口映射未配置或配置错误
EXPOSE指令不会自动完成宿主机到容器的端口映射,如果你启动容器时没有添加-p参数配置端口映射,宿主机无法通过1234端口访问到容器内的服务。 - 站点文件权限不足
COPY到容器内的站点文件如果权限配置不当,Tomcat运行用户没有读取权限,也会返回404错误,可进入容器执行chmod -R 755 /usr/local/tomcat/webapps修复权限。
内容的提问来源于stack exchange,提问作者Денис Задорожний
相关产品推荐
相关产品推荐

