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

ARM M1 Mac部署.NET 8 API至Azure App Service启动失败求助

问题:.NET 8 Web API部署到Azure Web App容器启动失败(端口探测无响应)

我使用Apple M1设备开发了一个基础.NET 8 Web API,本地Docker环境运行正常,但部署到Azure Web App后启动失败,日志显示容器在80端口未响应HTTP探测。


相关代码

Program.cs

var builder = WebApplication.CreateBuilder(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "80";
builder.WebHost.UseUrls($"http://*:{port}");
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddControllers();

var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();    
app.MapControllers();
app.Run();

Dockerfile

# build
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app

# copy csproj and restore dependecies 
COPY *.csproj ./
RUN dotnet restore

# Copy others files and build
COPY . ./
RUN dotnet publish -c Release -o out

# run
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
EXPOSE 80
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "BgxApi8.dll"]

本地运行情况

docker build -t bgxapi8 .
docker run -p 80:80 bgxapi8
GET {{baseUrl}} -> "It works"

部署到Azure的步骤及错误日志

推送镜像到ACR:

docker tag bgxapi8:latest bgxapi8container.azurecr.io/bgxapi8:latest
docker push bgxapi8container.azurecr.io/bgxapi8:latest

创建Linux环境Azure Web App,选择ACR镜像启动后,日志报错:

... 2023-12-02T09:02:39.420Z INFO  - e194839a3db8 Pull complete
2023-12-02T09:02:40.160Z INFO  -  Digest:
sha256:1ac77a5b131c17b141f23e7fe360eb92d9d2d405c5e4783b23261c8f49d031c2
2023-12-02T09:02:40.160Z INFO  -  Status: Downloaded newer image for
bgxapi8container.azurecr.io/bgxapi8:latest 2023-12-02T09:02:40.165Z
INFO  - Pull Image successful, Time taken: 16 Seconds
2023-12-02T09:02:41.162Z INFO  - Starting container for site
2023-12-02T09:02:41.162Z INFO  - docker run -d --expose=80 --name
bgxapi8_0_d872b733 -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e
WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=bgxapi8
-e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=bgxapi8.azurewebsites.net -e WEBSITE_INSTANCE_ID=d48e7722c44716b2d3b260fd39937cd26b4df2c1aad200418e83e1648d9c8bd5
bgxapi8container.azurecr.io/bgxapi8:latest  2023-12-02T09:02:41.162Z
INFO  - Logging is not enabled for this container. Please use
https://aka.ms/linux-diagnostics to enable logging to see container
logs here. 2023-12-02T09:02:43.219Z INFO  - Initiating warmup request
to container bgxapi8_0_d872b733 for site bgxapi8
2023-12-02T09:02:43.244Z ERROR - Container bgxapi8_0_d872b733 for site
bgxapi8 has exited, failing site start 2023-12-02T09:02:43.249Z ERROR
- Container bgxapi8_0_d872b733 didn't respond to HTTP pings on port: 80, failing site start. See container logs for debugging.
2023-12-02T09:02:43.280Z INFO  - Stopping site bgxapi8 because it
failed during startup.

原因分析

  1. 架构不匹配:Apple M1是ARM64架构,本地构建的镜像是ARM64版本,但Azure Web App的Linux环境默认使用x86_64(AMD64)架构,容器运行时无法兼容,导致应用启动失败,无法响应端口探测。
  2. HTTPS重定向冲突:代码中启用了app.UseHttpsRedirection(),但Azure Web App的探测请求是HTTP协议,应用会将请求重定向到HTTPS,探测逻辑会认为端口无响应。

解决方法

方法1:构建多架构兼容的Docker镜像

在构建镜像时指定同时支持AMD64和ARM64架构,确保Azure环境能正常运行:

# 创建并切换到多架构构建上下文
docker buildx create --use
# 构建并推送多架构镜像到ACR
docker buildx build --platform linux/amd64,linux/arm64 -t bgxapi8container.azurecr.io/bgxapi8:latest --push .

方法2:调整代码适配Azure探测

修改Program.cs,仅在开发环境启用HTTPS重定向,生产环境由Azure处理SSL终止:

var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
// 仅开发环境启用HTTPS重定向
if (app.Environment.IsDevelopment())
{
    app.UseHttpsRedirection();
}
app.MapControllers();
app.Run();

方法3:配置Azure Web App的探测设置

进入Azure门户的Web App「配置」→「常规设置」:

  • 将「启动探测」或「就绪探测」的协议改为HTTPS
  • 或者调整探测路径到实际存在的API端点(比如/api/health)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:35