Ubuntu下Docker构建.NET项目dotnet restore报NU1301错误求助
NU1301 Docker构建还原失败修复方案
问题本质
构建阶段.NET SDK容器无法正常访问NuGet源,和是否使用Visual Studio无关,Ubuntu环境下按以下步骤修复即可。
排查修复步骤
第一步:验证容器外网连通性
执行临时容器测试NuGet源访问能力:docker run --rm mcr.microsoft.com/dotnet/sdk:6.0-focal curl -I https://api.nuget.org/v3/index.json如果命令返回连接超时、域名解析失败,先修改Docker daemon的DNS配置:
- 编辑
/etc/docker/daemon.json(不存在就新建),写入配置:
{ "dns": ["223.5.5.5", "114.114.114.114"] }- 执行
sudo systemctl restart docker重启Docker服务,重新跑上面的curl命令,直到返回200状态码。
- 编辑
第二步:修正Dockerfile配置问题
原Dockerfile存在两处问题:一是libcurl4装在了base运行时镜像里,build阶段的SDK镜像没装这个依赖,会导致NuGet的HTTP请求异常;二是如果官方源访问延迟高,可直接在构建阶段配置国内镜像源。
修正后的完整Dockerfile如下:FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0-focal AS build # 构建阶段安装libcurl依赖,清理apt缓存减小镜像层体积 RUN apt-get update && apt-get install -y libcurl4 && rm -rf /var/lib/apt/lists/* WORKDIR /src # 国内网络环境取消下面一行注释,使用国内NuGet源 # RUN dotnet nuget add source https://nuget.cdn.azure.cn/v3/index.json -n nuget-cn COPY ["MyBackEnd/MyBackEnd.csproj", "MyBackEnd/"] RUN dotnet restore "MyBackEnd/MyBackEnd.csproj" COPY . . WORKDIR "/src/MyBackEnd" RUN dotnet build "MyBackEnd.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "MyBackEnd.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyBackEnd.dll"]第三步:清理缓存重新构建
旧的失败构建层会被Docker缓存,改完配置后执行无缓存构建:docker compose build --no-cache mybackend docker compose up
Dapr集成前置提示
单服务正常启动后,再往compose配置里加Dapr sidecar、placement服务即可,注意所有服务要加入同一个自定义Docker网络,给业务服务配置对应的Dapr注解,.NET项目引入Dapr SDK后不需要额外改服务调用地址,SDK会自动和本地sidecar通信完成服务发现与调用。
内容的提问来源于stack exchange,提问作者JustADude
相关产品推荐
相关产品推荐

