无法将.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域名:
构建时观察是否能正常解析,若无法解析,需调整Docker网络配置:RUN ping api.nuget.org -n 3- 若使用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

