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

Docker部署FastAPI后Java HttpClient连接报错:http1_0 content, bytes received:0

解决思路

针对Docker部署FastAPI后Java HttpClient无法连接的问题,从以下几个方向排查:

1. 确认Docker端口映射配置

运行容器时必须显式映射端口,仅在Dockerfile中EXPOSE 8000不会自动完成端口转发。执行容器启动命令时添加端口映射参数:

docker run -p 8000:8000 [你的镜像名]

确保Java代码中请求的http://localhost:8000能正确指向容器内的服务。

2. 移除Uvicorn的--reload参数

Docker容器中使用--reload(开发热重载模式)可能引发连接兼容性问题,且生产环境不建议启用该参数。修改Dockerfile的CMD命令:

CMD ["uvicorn", "main:api", "--host=0.0.0.0", "--port=8000"]

重新构建镜像并运行容器后测试连接。

3. 补充请求头的Content-Type字段

Postman会自动添加Content-Type: application/json头,但你的Java代码中未设置该字段。FastAPI接收到无Content-Type的JSON请求时,可能无法解析请求体并提前关闭连接,导致Java端抛出连接重置错误。修改Java代码:

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://localhost:8000/api/dummy"))
        .version(HttpClient.Version.HTTP_1_1)
        .header("Content-Type", "application/json") // 添加这一行
        .POST(HttpRequest.BodyPublishers.ofString(jsonRequest.toString()))
        .build();

4. 检查Java HttpClient的连接配置

尝试显式配置HttpClient,禁用HTTP/2并设置合理的超时时间,避免因协议协商或超时导致的连接问题:

HttpClient client = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_1_1)
        .connectTimeout(Duration.ofSeconds(10))
        .build();

5. 查看容器日志定位问题

通过Docker日志查看Uvicorn是否收到Java的请求,以及是否有错误信息:

docker logs [容器ID/名称]

如果日志显示请求被拒绝或解析失败,可针对性调整FastAPI接口的请求体定义或Java请求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:45:43