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

.NET 8.0 WebAPI/Swagger Docker部署后拒绝连接问题

问题分析与解决方法

核心问题

从日志可见,你的.NET 8应用在容器内实际监听的是8080端口,但Docker端口映射是将宿主机8860端口转发到容器的80端口,端口不匹配导致连接失败。

.NET 8的ASP.NET Core基础镜像默认行为与.NET 7存在差异:.NET 7的aspnet镜像默认监听80端口,而.NET 8镜像默认改为监听8080端口,这是引发问题的关键原因。

解决方法(二选一即可)

方法1:调整Docker端口映射规则

停止当前容器后,重新运行时将宿主机端口转发到容器的8080端口:

docker run -p 8860:8080 myapi

如果使用Docker Compose,修改ports配置项:

ports:
  - "8860:8080"

方法2:配置应用在容器内监听80端口(与.NET 7保持一致)

有两种实现方式:

  1. 通过Dockerfile设置环境变量:在ENTRYPOINT前添加环境变量指定监听端口:
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
    WORKDIR /app
    
    COPY *.csproj ./
    RUN dotnet restore
    
    COPY . ./
    RUN dotnet publish -c Release -o out
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    WORKDIR /app
    # 指定应用监听80端口
    ENV ASPNETCORE_URLS=http://+:80
    RUN chmod -R 755 /app
    COPY --from=build-env /app/out .
    ENTRYPOINT ["dotnet", "myapi.dll"]
    
  2. 在应用代码中明确配置:在Program.cs里指定监听端口:
    var builder = WebApplication.CreateBuilder(args);
    // 其他配置代码...
    var app = builder.Build();
    // 中间件配置代码...
    app.Run("http://+:80");
    

验证步骤

修改完成后重新构建镜像并启动容器,查看日志确认监听端口与映射端口一致,再访问http://1.2.3.4:8860即可正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:24:52