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

Docker容器中Spring GraphQL路径404问题求助

排查Spring GraphQL部署Docker后404的问题

针对你遇到的Docker部署后GraphQL端点返回404的问题,结合你的配置文件,从以下几个方向逐一排查:

1. 确认应用是否正常启动并初始化GraphQL端点

先查看容器的启动日志,执行命令:

docker logs myapp.service

重点关注两类日志:

  • 数据库连接报错:虽然depends_on保证了容器启动顺序,但PostgreSQL启动后需要几秒初始化才能接受连接,应用启动时可能因连接失败导致上下文加载异常,进而使GraphQL端点未注册。解决方法是添加数据库连接重试机制,比如在docker环境变量中补充:
    - SPRING_DATASOURCE_HIKARI_CONNECTION-TIMEOUT=20000
    - SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE=5
    
    或者给myapp.service添加restart: on-failure配置,让应用自动重试直到数据库就绪。
  • GraphQL初始化日志:检查是否有GraphQlWebMvcAutoConfiguration相关日志,确认/api/v1/graphql端点是否被成功注册。如果完全没有相关日志,说明GraphQL自动配置未生效。

2. 移除重复的GraphQL依赖

你的build.gradle中GraphQL相关依赖重复声明了两次,可能导致版本冲突或加载异常:

// 删除其中一组重复的依赖,保留即可
implementation 'org.springframework.boot:spring-boot-starter-graphql'
testImplementation 'org.springframework.graphql:spring-graphql-test'
testImplementation 'org.springframework:spring-webflux'

修改后重新打包镜像:

docker-compose build myapp.service
docker-compose up -d myapp.service

3. 排除Spring Boot DevTools

spring-boot-devtools是开发环境工具,不应该出现在生产镜像中,它可能导致类加载异常或自动重启,影响端点注册。修改build.gradle:

// 将原developmentOnly改为runtimeOnly,并添加排除配置
runtimeOnly 'org.springframework.boot:spring-boot-devtools'

bootJar {
    excludeDevtools = true
}

或者直接删除devtools依赖,重新打包镜像。

4. 关于Swagger UI 404的说明

你的build.gradle中没有添加任何Swagger/OpenAPI相关依赖(比如springdoc-openapi-starter-webmvc-ui),所以Swagger UI本身就不存在,出现404是正常现象。如果需要Swagger支持,添加对应依赖:

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

5. 验证端口映射和访问路径

你的docker-compose中端口映射是8093:8080,外部访问路径必须对应:

  • GraphQL端点:POST http://localhost:8093/api/v1/graphql
  • GraphiQL:GET http://localhost:8093/graphiql
    确认你访问的路径没有混淆容器内端口(8080)和宿主机端口(8093)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:25:25