Azure Container App部署Blazor .NET8应用遇错误111求助
部署Blazor Web .NET8到Azure Container App出现upstream连接错误的排查方案
问题背景
已将Blazor Web .NET8应用打包至Azure容器注册表,成功部署Azure Container App修订版本,启动日志无异常,但访问应用URL时出现错误:
upstream connect error or disconnect/reset before headers. retried and the latest reset reason: remote connection failure, transport failure reason: delayed connect error: 111
使用的Dockerfile配置如下:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER app WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["src/Project.Title/Project.Title.csproj", "src/Project.Title/"] RUN dotnet restore "./src/Project.Title/./Project.Title.csproj" COPY . . WORKDIR "/src/src/Project.Title" RUN dotnet build "./Project.Title.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./Project.Title.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Project.Title.dll"]
排查方向与解决步骤
错误delayed connect error: 111本质是连接被拒绝,说明Azure Container App的入口流量无法转发到容器内的应用进程,按以下步骤逐一排查:
1. 确认应用监听地址配置
Blazor Web App默认监听localhost,但容器环境下必须监听0.0.0.0才能允许外部访问:
- 打开
Program.cs,确保启动代码指定正确的监听地址:var app = builder.Build(); // 必须监听0.0.0.0,允许容器外部访问 app.Run("http://0.0.0.0:80"); - 或者通过环境变量配置,在Azure Container App的环境变量中添加:
ASPNETCORE_URLS=http://0.0.0.0:80
2. 验证Azure Container App入口设置
- 确认入口的目标端口设置为80(与Dockerfile暴露端口、应用监听端口一致)
- 检查入口协议为HTTP(除非你为应用配置了HTTPS证书并监听443端口)
- 确认路由规则的路径前缀与应用路由匹配,避免因路径不匹配导致流量无法到达应用
3. 检查容器内进程监听状态
通过Azure Portal进入容器应用的终端,执行命令验证应用是否在端口80监听:
netstat -tulpn | grep dotnet
如果输出中没有0.0.0.0:80的记录,说明应用未正确启动或监听地址配置错误。
4. 排查网络与安全限制
- 若使用自定义虚拟网络,确认VNet的安全组或网络规则未阻止端口80的入站流量
- 检查容器应用的网络配置,确保启用了外部访问权限(入口类型设置为"外部")
5. 验证Dockerfile的启动逻辑
你的Dockerfile中EXPOSE 80仅为端口声明,不会实际打开端口,关键是ENTRYPOINT启动的dotnet命令是否正确加载应用。确认Project.Title.dll是正确的入口程序集,发布过程无错误。
内容的提问来源于stack exchange,提问作者Yan D
相关产品推荐
相关产品推荐

