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

Docker部署.NET 8 Web API到AWS App Runner的Kestrel端口绑定问题

解决.NET 8 Web API在AWS App Runner上的Kestrel端口绑定问题

核心问题

AWS App Runner要求应用必须监听8080端口,而你当前的Kestrel配置绑定的是80端口,导致端口不匹配,无法正常接收请求。

解决方案

方案1:通过环境变量动态适配端口(推荐,适配多环境)

这种方式不需要硬编码端口,能自动适配App Runner的环境设置:

  1. 修改Program.cs,替换硬编码的端口配置,改为从环境变量读取:
var builder = WebApplication.CreateBuilder(args);

// 优先读取App Runner的PORT环境变量,默认 fallback 到8080
var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
builder.WebHost.UseUrls($"http://0.0.0.0:{port}");

// 以下原有代码保持不变
var app = builder.Build();
app.MapGet("/", () => "Application Started");
app.UseSwagger();
app.UseSwaggerUI();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
  1. 更新Dockerfile的最终阶段,声明正确的监听端口:
# Stage 3: Runtime - Final Image
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app
EXPOSE 8080  # 替换原有的EXPOSE 80,或同时保留80作为兼容

COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "MainApi.API.dll"]
  1. 在AWS App Runner的服务设置中,确认容器端口配置为8080(创建/更新服务时的「服务设置」模块)。

方案2:直接硬编码监听8080端口(适合固定环境)

如果不需要适配其他运行环境,可以直接修改代码和Dockerfile:

  1. 修改Program.cs的Kestrel配置:
builder.WebHost.UseUrls("http://0.0.0.0:8080");
  1. 更新Dockerfile的EXPOSE指令为8080:
EXPOSE 8080
  1. 确保App Runner的容器端口设置为8080。

额外注意点

  • 不需要在Docker中配置端口映射(比如-p参数),App Runner会自动将外部请求转发到你配置的容器端口。
  • 也可以通过设置ASPNETCORE_URLS环境变量来覆盖Kestrel配置:在Dockerfile的final阶段添加ENV ASPNETCORE_URLS=http://0.0.0.0:8080,或者在App Runner的环境变量中直接设置,这样不需要修改Program.cs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:22