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

.NET 8多API Docker部署环境下Nginx反向代理仅8080端口可用,8081端口报502网关错误求助

.NET 8多API Docker部署环境下Nginx反向代理仅8080端口可用,8081端口报502网关错误求助

兄弟,我完全懂你折腾两天的崩溃感——这种升级后突然出现的诡异端口问题真的太磨人了!结合你给出的配置和症状,我来帮你梳理几个大概率能解决问题的方向:

1. 核心排查:.NET 8默认监听端口的变化(最可能的根因)

你提到之前.NET 6一切正常,升级到.NET 8就出问题,这绝对是关键线索!.NET 8的ASP.NET Core默认监听端口从.NET 6的80改成了8080(由ASPNETCORE_HTTP_PORTS环境变量控制)。

看你的配置:

  • API1在docker-compose里映射了8080:8080,刚好匹配.NET 8的默认监听端口,所以能正常访问;
  • API2映射了8081:8081,但你没在容器里告诉.NET 8要监听8081端口!容器内的API其实还是在默认的8080端口监听,Nginx去连8081自然会连接失败,报502。

解决方案:
给API2明确指定监听端口,二选一即可:

  • 在docker-compose.yml的api2服务里添加环境变量:
    api2:
      image: ${DOCKER_REGISTRY-}api2:latest
      container_name: api2
      build:
        context: .
        dockerfile: api2.API/Dockerfile
      ports:
        - "8081:8081"
      environment:
        - ASPNETCORE_HTTP_PORTS=8081  # 关键:指定容器内监听端口
    
  • 或者在API2的Dockerfile的final阶段添加环境变量:
    FROM base AS final
    WORKDIR /app
    ENV ASPNETCORE_HTTP_PORTS=8081  # 添加这一行
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "xxx.Api.dll"]
    

2. 验证容器内端口监听状态

可以进入API2容器,确认它真的在8081端口监听:

# 进入api2容器
docker exec -it api2 /bin/bash
# 查看监听端口(容器里如果没有netstat,用ss命令)
ss -tulpn

如果输出里看不到:8081的监听记录,就说明上面的环境变量配置没生效,得检查拼写或位置是否正确。

3. 排查Nginx与API容器的连通性

进入Nginx容器,直接测试能不能访问API2的8081端口:

docker exec -it nginx /bin/bash
# 测试连接
curl http://api2:8081

如果返回connection refused,那肯定是API2容器内没监听8081;如果能返回API的响应内容,再检查Nginx的rewrite规则和header配置是否有问题(不过从你的配置看,rewrite规则是正常的)。

4. 别被launchsettings.json误导

你贴的launchsettings.json里的Docker配置是本地调试用的,部署到生产环境的Docker容器不会读取这个配置,所以重点还是Dockerfile和docker-compose里的环境变量设置。

备注:内容来源于stack exchange,提问作者Big Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:13:05