Azure DevOps 2020流水线Docker还原卡住,报NU1301错误求助
Azure DevOps 2020中的多条流水线此前运行正常,如今突然失效。排查发现Docker在执行还原操作时卡住,将项目克隆到Docker服务器本地执行docker build命令后,出现与Azure DevOps日志一致的错误。
环境信息
- 操作系统:Rocky Linux 8.6
- Docker版本:20.10.18
错误详情
构建失败,/src/RLData_API/RLData_API.csproj报NU1301错误:无法加载源http://api.nuget.org/v3/index.json的服务索引。
配置文件
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["RLData_API/RLData_API.csproj", "RLData_API/"] COPY ["RLData_API/nuget.config", ""] #RUN dotnet restore "RLData_API/RLData_API.csproj" RUN dotnet restore -v diag "RLData_API/RLData_API.csproj" --configfile nuget.config COPY . . WORKDIR "/src/RLData_API" RUN dotnet build "RLData_API.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "RLData_API.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "RLData_API.dll"]
nuget.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="Feed" value="http://dev.to.com/Iro/IQ/_packaging/Feed/nuget/v3/index.json" /> <add key="nuget.org" value="http://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> <activePackageSource> <add key="All" value="(Aggregate source)" /> </activePackageSource> <packageSourceCredentials> <Feed> <add key="Username" value="iro" /> <add key="ClearTextPassword" value="my PAT Token" /> <add key="ValidAuthenticationTypes" value="basic" /> </Feed> </packageSourceCredentials> </configuration>
验证网络连通性
在Docker服务器上执行curl -v http://api.nuget.org/v3/index.json,确认能正常返回索引内容。如果失败,检查服务器防火墙规则、网络代理设置,确保Docker容器具备外网访问权限。同时检查Docker daemon的代理配置(/etc/docker/daemon.json),若有代理需验证其可用性。切换NuGet源为HTTPS
将nuget.config中nuget.org的地址从http://api.nuget.org/v3/index.json改为https://api.nuget.org/v3/index.json,HTTP协议可能被拦截或存在兼容性问题,HTTPS是NuGet官方推荐的协议。调整Dockerfile中的还原路径
当前nuget.config被复制到/src根目录,可尝试将其复制到项目目录下,确保还原命令能正确读取配置:COPY ["RLData_API/nuget.config", "RLData_API/"] RUN dotnet restore -v diag "RLData_API/RLData_API.csproj" --configfile RLData_API/nuget.config也可以直接移除
--configfile参数,让dotnet自动识别项目目录下的配置文件。排查私有源认证问题
虽然错误指向nuget.org,但私有源的认证失败可能导致整个还原流程阻塞。检查PAT令牌是否过期、是否具备私有Feed的读取权限,可暂时注释掉nuget.config中的私有源配置,单独测试nuget.org的还原是否正常,以此定位问题。更新.NET SDK镜像
尝试使用指定版本的.NET SDK镜像(如mcr.microsoft.com/dotnet/sdk:6.0.416)替代mcr.microsoft.com/dotnet/sdk:6.0,旧镜像可能存在NuGet相关的已知bug,更新后可解决兼容性问题。
内容的提问来源于stack exchange,提问作者a.sadeh

