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

.NET 5.0 Web API 容器化后无法访问站点问题求助

问题根因

访问失败是三个问题共同导致的:

  • 环境变量未生效:你将ASPNETCORE_URLS配置在了base构建阶段,但最终容器运行使用的是单独拉取的runtime阶段镜像,没有继承该环境变量,应用在容器内默认监听80端口,而非你预期的5000
  • 端口映射与访问地址不匹配:你启动容器时配置的映射规则为8000:5000,端口映射规则永远是「宿主机端口:容器内端口」,也就是宿主机8000端口才会转发到容器的5000端口,但你直接访问localhost:5000,没有走映射规则,自然无法访问
  • Swagger默认未启用:.NET 5默认仅在Development环境下加载Swagger中间件,容器运行时默认环境为Production,就算接口可通,访问Swagger路径也会返回404

修正方案

1. 调整Dockerfile

将环境变量配置挪到最终运行的runtime阶段,统一端口逻辑,同时配置开发环境启用Swagger,修正后的Dockerfile如下:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app   
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["API/WebUI/Summit.API.csproj", "API/WebUI/"]
COPY ["Application/Summit.Application.csproj", "Application/"]
COPY ["Domain/Shared/Summit.Domain.csproj", "Domain/Shared/"]
COPY ["Domain/SqlKata.Execution/SqlKata.Execution.csproj", "Domain/SqlKata.Execution/"]
COPY ["Domain/QueryBuilder/QueryBuilder.csproj", "Domain/QueryBuilder/"]
COPY ["Infrastructure/Summit.Infrastructure.csproj", "Infrastructure/"]
RUN dotnet restore "API/WebUI/Summit.API.csproj"
COPY . .
WORKDIR "/src/API/WebUI"
RUN dotnet build "Summit.API.csproj" -c Release 

FROM build AS publish
RUN dotnet publish "Summit.API.csproj" -c Release

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY --from=publish /src/API/WebUI/bin/Release/net5.0/publish .
EXPOSE 80
# 配置开发环境启用Swagger
ENV ASPNETCORE_ENVIRONMENT=Development
# 配置应用监听80端口
ENV ASPNETCORE_URLS=http://*:80
ENTRYPOINT ["dotnet", "Summit.API.dll"] 

2. 重新构建镜像并启动容器

使用修正后的Dockerfile重新构建镜像,之后执行以下命令启动容器:

docker container run -itd -p 5000:80 镜像ID

3. 访问验证

容器启动完成后,访问http://localhost:5000/swagger即可正常打开Swagger页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:04