Docker image运行后浏览器访问报资源不存在错误,该如何解决?
Docker容器服务404报错排查方案
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists
上述报错属于标准HTTP 404状态码返回描述,核心原因是客户端请求的路径在服务端未匹配到对应资源,可按以下步骤逐一排查:
1. 验证端口映射与服务可用性
- 执行
docker ps查看运行容器的端口映射规则,确认宿主机访问端口已正确映射到容器内服务的实际监听端口(比如Tomcat默认监听8080、Nginx默认监听80) - 进入容器内部执行
curl localhost:容器内服务端口/测试路径,如果容器内部访问也报相同错误,排除端口映射、宿主机网络问题,问题出在容器内部的服务配置
2. 检查资源部署路径配置(针对Tomcat等Java Web服务)
如果已经尝试过webapps配置仍未解决,重点排查以下点:
- 执行
docker exec -it 容器ID/容器名 /bin/bash进入容器,确认webapps目录下存在你要访问的项目文件夹/war包:部分官方Tomcat镜像默认webapps目录为空,实际默认资源存放在webapps.dist目录,需手动将webapps.dist下的所有内容迁移到webapps目录才能访问默认管理页、示例页 - 确认项目包命名和访问上下文路径匹配:比如你访问的路径是
http://域名/order,则webapps目录下需要有名为order的解压后文件夹,或对应的war包命名为order.war - 执行
docker logs 容器ID/容器名查看服务启动日志,确认项目是否正常部署完成,有没有依赖缺失、启动异常的报错信息
3. 核对访问路径与服务配置
- 确认服务是否配置了上下文路径前缀:比如SpringBoot项目在配置文件中指定了
server.servlet.context-path=/api,则所有请求路径都需要加上/api前缀才能匹配到对应资源 - 确认路径大小写拼写正确:Linux系统大小写敏感,比如资源路径是
/user/getInfo,请求写成/User/getinfo就会返回404 - 如果是Nginx类的代理服务,检查
nginx.conf里的root/alias配置是否指向了静态资源的实际存放目录,location规则是否匹配你请求的路径
4. 排查资源权限问题
- 进入容器后执行
ls -l 资源存放目录,确认服务运行的用户对资源文件有读取权限,权限不足可执行chmod -R 755 资源存放目录临时修正验证 - 检查服务的访问控制配置:比如Tomcat的
conf/server.xml中Host节点的appBase配置是否正确,有没有配置禁止访问对应路径的规则
快速验证方法
在容器内的资源根目录下放一个命名为test.html的测试静态文件,写入任意测试内容,先在容器内部curlhttp://localhost:服务端口/test.html确认可以正常返回,再从外部浏览器访问,快速定位是资源不存在还是路径配置错误。
内容的提问来源于stack exchange,提问作者Anchal Garg
相关产品推荐
相关产品推荐

