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

无法将.NET 5.0/6.0发布至Azure容器注册表:Docker相关NuGet错误求助

问题描述

创建Web API项目并添加Dockerfile后,发布至Azure Container Registry时出现NuGet无法加载服务索引的错误,提示No such host is known. (api.nuget.org:443),该问题在.NET 5.0/6.0、VS2019/2022环境下均复现。已尝试以下操作但未解决:

  • 浏览器可正常访问NuGet源地址
  • 删除AppData和LocalData中的NuGet缓存
  • 重启Visual Studio
  • 重新创建Dockerfile

错误信息:

C:\Program Files\dotnet\sdk\5.0.408\NuGet.targets(131,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [C:\src\learndoc\learndoc.csproj]
C:\Program Files\dotnet\sdk\5.0.408\NuGet.targets(131,5): error : No such host is known. (api.nuget.org:443) [C:\src\learndoc\learndoc.csproj]
C:\Program Files\dotnet\sdk\5.0.408\NuGet.targets(131,5): error : No such host is known. [C:\src\learndoc\learndoc.csproj]
Removing intermediate container d8f9a4f724d7
The command 'cmd /S /C dotnet restore "learndoc/learndoc.csproj"' returned a non-zero code: 1
C:\Users\source\repos\learndocker\learndoc\Dockerfile(0,0): Error CTC1014: Docker command failed with exit code 1.

Dockerfile内容:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["learndoc/learndoc.csproj", "learndoc/"]
RUN dotnet restore "learndoc/learndoc.csproj"
COPY . .
WORKDIR "/src/learndoc"
RUN dotnet build "learndoc.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "learndoc.dll"]
解决方案

1. 排查Docker容器网络解析问题

  • 在Dockerfile的dotnet restore步骤前添加测试命令,验证容器内是否能解析NuGet域名:
    RUN ping api.nuget.org -n 3
    
    构建时观察是否能正常解析,若无法解析,需调整Docker网络配置:
    • 若使用Docker Desktop,尝试切换WSL 2/Hyper-V引擎;
    • 手动配置Docker DNS服务器(如8.8.8.8),在Docker Desktop设置 -> Docker Engine中添加:
      "dns": ["8.8.8.8", "8.8.4.4"]
      

2. 调整NuGet还原命令参数

  • 在dotnet restore时明确指定源并禁用并行请求:
    RUN dotnet restore "learndoc/learndoc.csproj" -s https://api.nuget.org/v3/index.json --disable-parallel
    
  • 若网络环境受限,可在项目中添加NuGet.Config文件,配置国内镜像源,并在Dockerfile中指定使用该配置:
    RUN dotnet restore "learndoc/learndoc.csproj" --configfile NuGet.Config
    

3. 检查代理配置

  • 若主机使用代理,需确保Docker容器继承代理设置:
    • 在Docker Desktop设置 -> Proxy中开启"Manual proxy configuration",填入代理地址;
    • 或在Dockerfile中添加环境变量:
      ENV HTTP_PROXY=http://your-proxy-address:port
      ENV HTTPS_PROXY=http://your-proxy-address:port
      
  • 检查本地NuGet全局配置文件(%appdata%\NuGet\NuGet.Config),确认代理设置正确,无无效配置。

4. 清理Docker缓存与基础镜像

  • 重新拉取最新的.NET SDK基础镜像:
    docker pull mcr.microsoft.com/dotnet/sdk:5.0
    
  • 清理Docker构建缓存,避免旧缓存影响:
    docker builder prune -f
    

内容的提问来源于stack exchange,提问作者Rohit Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:05:03