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

Windows Server 2019容器构建失败:dotnet restore返回错误码4294967295

Windows Server 2019构建.NET 6 Windows容器时dotnet restore返回错误码4294967295

我在Windows Server 2019构建服务器上构建Windows容器时,dotnet restore步骤始终失败,报错信息如下:

The command '/bin/sh -c dotnet restore "..." returned a non-zero code: 4294967295'

本地通过Docker Desktop切换到Windows容器模式时,使用相同的Dockerfile可以正常构建,但在服务器上无论是通过Azure DevOps流水线还是手动执行PowerShell构建,都会出现相同错误。IT团队要求必须使用Windows容器/构建服务器。

使用的Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 8000
ENV ASPNETCORE_URLS=http://*:8000

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Services/myService.API.csproj", "Services/myService.API/"]
COPY ["Services/myService.DAL.csproj", "Services/myService.DAL/"]
COPY ["BuildingBlocks/BuildingBlocks.csproj", "BuildingBlocks/"]
RUN dotnet restore "Services/myService.API.csproj"
COPY . .
WORKDIR "/src/Services/myService.API"
RUN dotnet build "myService.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myService.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myService.API.dll"]

已执行的排查步骤

  • 最初通过Azure DevOps流水线构建容器,出现上述错误;
  • 在服务器上通过PowerShell手动执行构建,错误相同;
  • 在本地通过Docker Desktop构建镜像,可正常完成;
  • 安装WSL并确认Windows容器安装后重新执行,仍报错。

我注意到很多关联该错误码的问题都与WSL和Hyper-V有关,但我们使用的是Windows镜像,不确定为何需要它们。求类似问题的解决方案或排查思路。


排查思路与解决方案

  1. 匹配容器镜像与宿主机的Windows版本
    Windows容器要求宿主机和镜像的Windows版本兼容,Windows Server 2019对应ltsc2019标签的镜像。你当前使用的默认6.0标签镜像可能基于Windows Server 2022,修改Dockerfile的镜像源:
FROM mcr.microsoft.com/dotnet/aspnet:6.0-windowsservercore-ltsc2019 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2019 AS build

版本不兼容是Windows容器构建失败的高频原因,会导致底层命令执行出现未知错误。

  1. 获取dotnet restore的详细日志
    错误码4294967295是通用非零退出码,无具体指向。修改dotnet restore命令添加诊断日志参数:
RUN dotnet restore "Services/myService.API.csproj" -v diag

重新构建后查看完整日志,可定位具体失败原因(如NuGet源访问失败、依赖缺失、文件权限问题等)。

  1. 验证服务器网络连接
    确认构建服务器能访问NuGet官方源或私有源:
  • 在服务器本地执行dotnet restore测试依赖拉取;
  • 或在Dockerfile中临时添加网络检测命令:
    RUN ping api.nuget.org
    RUN dotnet restore "Services/myService.API.csproj"
    

若网络不通,需检查服务器防火墙、代理配置,确保容器可正常访问外部网络。

  1. 检查Docker服务模式与权限
  • 执行docker info确认Docker服务运行在Windows容器模式(输出包含OSType: windows);
  • 确保执行构建命令的用户拥有足够权限访问项目文件和Docker资源。
  1. 清理Docker缓存
    服务器上的缓存镜像层可能损坏,执行以下命令清理后重新构建:
docker system prune -a

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:35:32