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

.NET Framework 4.8控制台应用部署Azure容器实例失败求助

问题:Azure容器实例部署失败(.NET Framework 4.8应用)

已在Docker Desktop成功运行应用,也能推送到Azure容器注册表,但创建Azure容器实例时失败。因项目依赖仅支持.NET Framework 4.8的第三方组件,无法切换至.NET 7(此前用.NET 7搭建测试实例成功),不清楚如何修改Dockerfile以使用官方列出的支持版本。

错误信息

{"code":"DeploymentFailed","target":"/subscriptions/.../deployments/Microsoft.ContainerInstances-20231003202653","message":"至少有一个资源部署操作失败。请列出部署操作以获取详细信息。请查看相关文档了解使用详情。","details":[{"code":"UnsupportedWindowsVersion","message":"不支持的Windows镜像版本。支持的版本包括 'Windows Server 2019 - Before 2B, Windows Server 2019 - After 2B, Windows Server, Version 1903 - After 2B, Windows Server, Version 2004, Windows Server 2022, Windows Server LTSC Preview Build'}]}

当前Dockerfile

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
WORKDIR /app

COPY *.csproj .
RUN dotnet restore

COPY . .
WORKDIR /app
RUN dotnet publish -c Release -o out --no-restore

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["MyApp.exe"]

SDK风格项目文件

<Project Sdk="Microsoft.NET.Sdk;Microsoft.NET.Sdk.Publish">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
     <TargetFramework>net48</TargetFramework>
    <DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
    <DockerfileContext>.</DockerfileContext>
    <ApplicationManifest>app.manifest</ApplicationManifest>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
  </ItemGroup>
</Project>

app.manifest(用于提升权限读写注册表)

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <assemblyIdentity version="1.0.0.0" name="WorkShark48.exe" />
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
         <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
         </requestedPrivileges>
      </security>
   </trustInfo>
</asmv1:assembly>

解决方案

问题根源是默认的mcr.microsoft.com/dotnet/framework/sdk:4.8和runtime:4.8镜像使用的Windows版本不在Azure容器实例支持列表内,需给镜像指定具体的支持版本标签。

修改方案1:使用Windows Server 2022版本镜像

# 构建阶段选用Windows Server 2022的SDK镜像
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2022 AS build
WORKDIR /app

COPY *.csproj .
RUN dotnet restore

COPY . .
WORKDIR /app
RUN dotnet publish -c Release -o out --no-restore

# 运行阶段匹配对应版本的runtime镜像
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["MyApp.exe"]

修改方案2:使用Windows Server 2019版本镜像

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019 AS build
WORKDIR /app

COPY *.csproj .
RUN dotnet restore

COPY . .
WORKDIR /app
RUN dotnet publish -c Release -o out --no-restore

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["MyApp.exe"]

验证步骤

  1. 修改Dockerfile后重新构建镜像:docker build -t myapp:v2 .
  2. 推送新镜像到Azure容器注册表:docker push <你的ACR地址>/myapp:v2
  3. 使用新镜像创建Azure容器实例,确认部署成功。

注:选择的镜像Windows版本需与错误信息中列出的支持版本匹配,ltsc2022对应Windows Server 2022,ltsc2019对应Windows Server 2019,均为Azure容器实例支持版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:47:08