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=5myapp.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
相关产品推荐
相关产品推荐

