You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot API本地正常,Docker端口映射后访问出现404问题求助

容器端口映射访问SpringBoot API失败排查请求

本地直接访问http://localhost:8080/api/categories可正常获取响应,但通过Docker端口映射访问http://localhost:9090/api/categories时出现Whitelabel Error Page,容器日志显示:

No mapping for GET /api/categories


相关配置代码

Dockerfile

FROM openjdk:17-alpine
EXPOSE 8080
ADD target/spring-boot-ecommerce.jar spring-boot-ecommerce.jar
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait /wait
RUN chmod +x /wait
ENTRYPOINT ["java", "-jar", "spring-boot-ecommerce.jar"]

docker-compose端口配置

ports:
  - '9090:8080'

Controller类代码

@RestController
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping("/api/categories")
public class CategoryController{
  ...
}

Controller方法代码

@GetMapping()
public ResponseEntity<?> getAllCategories() {
 ...
}

更新信息

  • 本地访问API的请求截图:
    本地访问API截图
  • 通过Docker端口访问的请求截图:
    Docker端口访问API截图

排查方向

  1. 确保容器使用最新Jar包
    本地能正常运行说明本地target/spring-boot-ecommerce.jar没问题,但镜像内的Jar可能不是最新版本。重新构建镜像时添加--no-cache参数强制更新:
docker-compose build --no-cache
  1. 验证容器内SpringBoot实际启动端口
    虽然Dockerfile声明了EXPOSE 8080,但SpringBoot可能被配置为其他端口启动。进入容器检查:
# 替换container_name为你的容器名称
docker exec -it container_name sh
# 查看配置文件中的端口
cat application.properties | grep server.port
# 或直接查看启动日志里的端口信息

如果端口不是8080,需修改docker-compose的端口映射规则,或调整SpringBoot配置文件中的server.port为8080。

  1. 核对请求路径的一致性
    仔细对比本地和Docker访问的请求路径,确认没有大小写错误、额外空格或冗余参数,保证路径完全匹配/api/categories。

  2. 检查SpringBoot组件加载情况
    查看容器完整启动日志:

docker logs container_name

确认CategoryController是否被正确扫描加载,是否存在@ComponentScan配置错误导致Controller未注册。

  1. 测试容器内部API访问
    进入容器后用curl直接访问内部端口:
curl http://localhost:8080/api/categories

如果内部访问也失败,说明问题出在容器内的SpringBoot应用本身;如果内部访问正常,再用docker ps检查端口映射是否生效,确认9090端口已正确绑定到容器的8080端口。

内容的提问来源于stack exchange,提问作者coder87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:01:18