17

您好,我正在尝试应用程序,但dockerize在执行时失败。我已经检查了其他线程是否存在此特定问题 Nuget 连接尝试失败 "Unable to load the service index for source"ASP NET Core 2.1docker builddotnet restore

那里提供的解决方案对我没有帮助。

Dockerfile

ARG serverPath=./Core/Server

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app


COPY ./Core/Server/*.csproj ./
RUN dotnet restore  //fails here

COPY ./Core/Server/ ./
RUN dotnet publish -c Release -o out  


FROM microsoft/dotnet:2.1-aspnetcore-runtime 
WORKDIR /app
COPY --from=build-env /app/out  .
ENTRYPOINT ["dotnet","Server.dll"]

docker build 的输出

$ docker build -t server .
Sending build context to Docker daemon  11.13MB
Step 1/11 : ARG serverPath=./Core/Server
Step 2/11 : FROM microsoft/dotnet:sdk AS build-env
 ---> 343e2dc38168
Step 3/11 : WORKDIR /app
 ---> Using cache
 ---> e9b75480ecb9
Step 4/11 : COPY ./Core/Server/*.csproj ./
 ---> Using cache
 ---> 2de864bedf6a
Step 5/11 : RUN dotnet restore 
 ---> Running in 2fc6963e7e2c
  Restoring packages for /app/Server.csproj...
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/app/Server.csproj]
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error :   The SSL connection could not be established, see inner exception. [/app/Server.csproj]
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error :   Authentication failed because the remote party has closed the transport stream. [/app/Server.csproj]
The command '/bin/sh -c dotnet restore -p:RestoreUseSkipNonexistentTargets=false -nowarn:msb3202,nu1503' returned a non-zero code: 1
4

4 回答 4

3

尝试这个

docker network ls

这应该列出 networkID 尝试运行 docker build

docker build --network=<networkid> tag=<tag>

尝试上面列出的所有网络,它将与一个网络一起工作,那就是主机网络。

于 2020-03-18T15:25:56.393 回答
2

尝试将您的 DNS 服务器更新为固定(默认应为8.8.8.8)。

我在设置-> 网络-> DNS 服务器中找到了这个

于 2019-12-31T10:45:55.237 回答
0

如果在 Windows 7 或 Windows Server 2008 R2 上,启用 TLS 1.2 以与新的 NuGet 服务器通信。 有关 NuGet TLS 状态的 Microsoft DevBlogs

于 2021-01-14T05:26:57.573 回答
0

尝试在我的 Windows 机器上运行的 WSL2(Ubuntu 20.04)中构建 docker 映像时,我看到了同样的错误。

就我而言,我确认我可以从我的 WSL2 中使用 nuget:

curl -v https://api.nuget.org/v3/index.json

但是,如果我尝试来自 Docker 容器的相同请求,它无法解析主机名(这只会挂起):

docker run -it --rm curlimages/curl -v -k https://api.nuget.org/v3/index.json

所以这指出了 DNS 的一个问题,并且由于 Docker 使用您的“主机”DNS 配置,我专注于我的 WSL2 DNS。我使用的是 WSL2 使用的默认 DNS。这意味着/etc/resolv.conf是自动生成的...我按照此处的说明将其关闭:https ://superuser.com/questions/1533291/how-do-i-change-the-dns-settings-for-wsl2

然后我手动配置的 DNS/etc/resolv.conf是我公司的内部 DNS 服务器。重新启动 WSL2 和 Docker 后,我能够在 Docker 容器中解析 api.nuget.org。

于 2022-01-12T15:59:54.133 回答