无法访问Spring Boot Docker容器,Postman请求返回404错误
排查Spring Boot容器Postman访问404的步骤
以下是针对问题的逐一排查点,按优先级从高到低:
1. 确认Docker端口映射是否生效
EXPOSE 8080只是Dockerfile中的声明,不会自动完成端口映射。启动容器时必须显式指定端口映射参数:
docker run -p 8080:8080 <你的镜像名称/ID>
如果启动时没加-p 8080:8080,外部Postman根本无法访问容器内的8080端口,直接返回404。
2. 验证容器内服务是否正常响应
先排除外部网络问题,进入容器内部测试:
# 进入容器 docker exec -it <容器ID/名称> /bin/bash # 内部访问服务 curl localhost:8080
如果内部curl能拿到预期的字符串,说明服务本身没问题,问题出在外部访问的端口映射或网络配置;如果内部也返回404,说明服务启动有问题或配置错误。
3. 检查Spring Boot Controller的有效性
- 确保你的CategoryController类上添加了
@RestController注解(或者@Controller+@ResponseBody),没有这个注解,Spring不会将其识别为请求处理控制器。 - 检查主启动类(带
@SpringBootApplication的类)的包路径:默认情况下,Spring只会扫描主启动类所在包及其子包下的组件。如果你的Controller在不同的包下,需要在主启动类上添加@ComponentScan(basePackages = "com.your.controller.package")指定扫描路径。 - 确认
@GetMapping没有指定错误路径:你说用的是无路径的@GetMapping,也就是映射到根路径/,访问时直接请求http://localhost:8080即可,不要额外加路径。
4. 检查Spring Boot服务器配置
- 查看
application.properties或application.yml,确认没有修改server.port:如果配置了server.port=其他端口,容器内服务实际运行端口不是8080,需要对应调整Docker端口映射(比如-p 8080:8081)。 - 检查是否配置了
server.servlet.context-path:如果加了上下文路径(比如server.servlet.context-path=/api),访问时必须加上这个路径,即http://localhost:8080/api。
5. 查看容器启动日志
用以下命令查看容器日志,确认Spring Boot服务完全启动:
docker logs <容器ID/名称>
日志中应该能看到类似Started Application in X seconds (JVM running for X.X)的信息,同时检查是否有Controller初始化的日志(比如Mapped "{[/],methods=[GET]}" onto public java.lang.String com.xxx.CategoryController.xxx()),如果没有这条日志,说明Controller没被加载。
内容的提问来源于stack exchange,提问作者Yunus Asd
相关产品推荐
相关产品推荐

