【问题标题】:Docker Unable to load the service index for source https://api.nuget.org/v3/index.jsonDocker 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
【发布时间】:2018-05-15 10:07:46
【问题描述】:

我也有同样的问题。我怀疑这与代理背后有关。 我的 Dockerfile 是:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.sln ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "salesorder.qry.webapiapp.dll"]

我在使用 dotnet 发布的步骤中遇到错误:

$ docker build -t salesorder.qry.webapiapp .
Sending build context to Docker daemon  126.1MB
Step 1/10 : FROM microsoft/aspnetcore-build:2.0 AS build-env
 ---> 07590dec9c1e
Step 2/10 : WORKDIR /app
 ---> Using cache
 ---> 26007abaa8b5
Step 3/10 : COPY *.sln ./
 ---> Using cache
 ---> 69dc09df88f0
Step 4/10 : RUN dotnet restore
 ---> Using cache
 ---> 7c10e448f636
Step 5/10 : COPY . ./
 ---> Using cache
 ---> c588d98eb49b
Step 6/10 : RUN dotnet publish -c Release -o out
 ---> Running in 9492a4f61e38
Microsoft (R) Build Engine version 15.7.177.53362 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restoring packages for /app/SalesOrder.Cmd.Application.Model.Events/SalesOrder.Cmd.Application.Model.Events.csproj...
  Restoring packages for /app/SalesOrder.Cmd.Application.Model/SalesOrder.Cmd.Application.Model.csproj...
/usr/share/dotnet/sdk/2.1.200/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/app/SalesOrder.Qry.sln]
/usr/share/dotnet/sdk/2.1.200/NuGet.targets(114,5): error :   An error occurred while sending the request. [/app/SalesOrder.Qry.sln]
/usr/share/dotnet/sdk/2.1.200/NuGet.targets(114,5): error :   SSL connect error [/app/SalesOrder.Qry.sln]
The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1

但是,如果我直接运行相同的指令,我不会收到该错误:

$ dotnet publish -c Release -o out
Microsoft (R) Build Engine version 15.6.84.34536 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 43,43 ms for C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model\SalesOrder.Cmd.Application.Model.csproj.
  Restore completed in 43,43 ms for C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model.Events\SalesOrder.Cmd.Application.Model.Events.csproj.
  Restore completed in 4,67 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.Infra.InMemoryRepository\SalesOrder.Qry.Infra.InMemoryRepository.csproj.
  Restore completed in 46,18 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application.UnitTests\SalesOrder.Qry.Application.UnitTests.csproj.
  Restore completed in 51,08 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi.UnitTests\SalesOrder.Qry.WebApi.UnitTests.csproj.
  Restore completed in 32,46 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApiApp\SalesOrder.Qry.WebApiApp.csproj.
  Restore completed in 12,53 ms for C:\src\SalesOrder.QueryService\ToolBelt.Hateoas\ToolBelt.Hateoas.csproj.
  Restore completed in 13,54 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi\SalesOrder.Qry.WebApi.csproj.
  Restore completed in 2,16 ms for C:\src\SalesOrder.QueryService\ToolBelt.Mapping.Contracts\ToolBelt.Mapping.Contracts.csproj.
  Restore completed in 1,97 ms for C:\src\SalesOrder.QueryService\ToolBelt.Tests.Extensions\ToolBelt.Tests.Extensions.csproj.
  Restore completed in 55,52 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApiApp\SalesOrder.Qry.WebApiApp.csproj.
  Restore completed in 64,69 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application.UnitTests\SalesOrder.Qry.Application.UnitTests.csproj.
  Restore completed in 2,36 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.Domain.EventContracts\SalesOrder.Qry.Domain.EventContracts.csproj.
  Restore completed in 2,87 ms for C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application\SalesOrder.Qry.Application.csproj.
  SalesOrder.Cmd.Application.Model -> C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model\bin\Release\netstandard2.0\SalesOrder.Cmd.Application.Model.dll
  ToolBelt.Tests.Extensions -> C:\src\SalesOrder.QueryService\ToolBelt.Tests.Extensions\bin\Release\netstandard2.0\ToolBelt.Tests.Extensions.dll
  ToolBelt.Mapping.Contracts -> C:\src\SalesOrder.QueryService\ToolBelt.Mapping.Contracts\bin\Release\netstandard2.0\ToolBelt.Mapping.Contracts.dll
  ToolBelt.Tests.Extensions -> C:\src\SalesOrder.QueryService\ToolBelt.Tests.Extensions\out\
  ToolBelt.Mapping.Contracts -> C:\src\SalesOrder.QueryService\ToolBelt.Mapping.Contracts\out\
  SalesOrder.Cmd.Application.Model -> C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model\out\
  ToolBelt.Hateoas -> C:\src\SalesOrder.QueryService\ToolBelt.Hateoas\bin\Release\netstandard2.0\ToolBelt.Hateoas.dll
  SalesOrder.Cmd.Application.Model.Events -> C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model.Events\bin\Release\netstandard2.0\SalesOrder.Cmd.Application.Model.Events.dll
  SalesOrder.Cmd.Application.Model.Events -> C:\src\SalesOrder.QueryService\SalesOrder.Cmd.Application.Model.Events\out\
  ToolBelt.Hateoas -> C:\src\SalesOrder.QueryService\ToolBelt.Hateoas\out\
  SalesOrder.Qry.Application -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application\bin\Release\netstandard2.0\SalesOrder.Qry.Application.dll
  SalesOrder.Qry.Domain.EventContracts -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Domain.EventContracts\bin\Release\netcoreapp2.0\SalesOrder.Qry.Domain.EventContracts.dll
  SalesOrder.Qry.Domain.EventContracts -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Domain.EventContracts\out\
  SalesOrder.Qry.Infra.InMemoryRepository -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Infra.InMemoryRepository\bin\Release\netcoreapp2.0\SalesOrder.Qry.Infra.InMemoryRepository.dll
  SalesOrder.Qry.WebApi -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi\bin\Release\netstandard2.0\SalesOrder.Qry.WebApi.dll
  SalesOrder.Qry.Application -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application\out\
  SalesOrder.Qry.Application.UnitTests -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application.UnitTests\bin\Release\netcoreapp2.0\SalesOrder.Qry.Application.UnitTests.dll
  SalesOrder.Qry.Application.UnitTests -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Application.UnitTests\out\
  SalesOrder.Qry.Infra.InMemoryRepository -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.Infra.InMemoryRepository\out\
  SalesOrder.Qry.WebApi -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi\out\
  SalesOrder.Qry.WebApiApp -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApiApp\bin\Release\netcoreapp2.0\SalesOrder.Qry.WebApiApp.dll
  SalesOrder.Qry.WebApiApp -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApiApp\out\
  SalesOrder.Qry.WebApi.UnitTests -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi.UnitTests\bin\Release\netcoreapp2.0\SalesOrder.Qry.WebApi.UnitTests.dll
  SalesOrder.Qry.WebApi.UnitTests -> C:\src\SalesOrder.QueryService\SalesOrder.Qry.WebApi.UnitTests\out\

这怎么可能?

我尝试在 NuGet.Config 中添加以下代理设置 C:\Users\iberodev\AppData\Roaming\NuGet\NuGet.Config ```

运气不好。结果相同。我真的坚持这一点,我无法在任何地方找到好的答案,只是更多的困惑。

我看到建议运行 nuget.exe 配置,但据我了解 VS2017 甚至没有 nuGet.exe(请参阅 https://www.nuget.org/downloads 解释它)

这可能是由于在代理后面,但同样,不确定在哪里配置这些东西。我的 Docker for Windows 已经手动添加了代理配置。

任何建议将不胜感激

【问题讨论】:

  • 我有同样的问题你找到解决办法了吗? /usr/share/dotnet/sdk/2.1.200/NuGet.targets(114,5):错误:无法加载源api.nuget.org/v3/index.json的服务索引。
  • 没有。我还没有找到解决办法
  • 我做到了,公司防火墙对发出的请求进行了“SSL 检查”并更改了 NuGet 站点的 SSL 证书。我们在构建服务器的 IP 中添加了防火墙例外来不这样做。
  • @yaniv 这会解决你的问题吗?

标签: docker asp.net-core nuget dockerfile


【解决方案1】:

Docker 在它自己的(分离的)构建环境中运行,但默认情况下它不知道您的网络代理配置。

为了解决问题,this answer 给了我一个提示。我最终发出:

docker build --build-arg HTTP_PROXY=<proxy URL> --build-arg HTTPS_PROXY=<proxy URL> -t <application name>

代理 URL 遵循以下格式:http://USERNAME:PASSWORD@PROXYIP:PROXYPORT

【讨论】:

  • 它有效。我必须将 --build-arg 选项放在命令的末尾,否则它不起作用,我不知道为什么。
【解决方案2】:

我遇到了一个类似的问题 - 并且需要一个类似于 ltuska 提出的代理设置的解决方案。

运行 docker build 或 docker-compose build 时,任何需要网络访问的 RUN 指令都需要有效的“构建”网络才能提取资源(特别是与 mcr.microsoft 链接的“RUN dotnet restore”。 com/dotnet/core/sdk:3.1-alpine 映像需要 HTTP GET 访问 https://api.nuget.org/v3/index.json)

在我在公司数据中心运行的 linux 机器上,有两点与标准 docker 安装方案完全不同:

  1. 默认的 docker bridge 网络已被禁用
  2. 对公共互联网资源的出站访问需要通过代理服务器进行连接

"bridge":"none" 已在 /etc/docker/daemon.json 中设置,禁用默认桥接网络。

要完成映像构建,我需要做两件事:

  1. 明确提供一个可以访问互联网的 docker 网络(或者在我的情况下访问一个可以访问互联网的代理服务器)

  2. 明确指定代理设置

来自 'docker network ls' - 我确定了在主机上配置的现有桥接网络的名称,以允许将桥接网络流量发送到外部世界。

使用 docker build,命令看起来类似于 ...

docker build --network=xxxbridge --build-arg HTTP_PROXY=http://www-proxy.yyyy:80 --build-arg HTTPS_PROXY=http://www-proxy.yyyy:80

从 docker compose 的角度来看,我必须修改 docker-compose.yml 并为服务指定显式构建网络 ...

docker-compose.yml sn-p:

...
services:
  myService:
    build:
      context: ./MyService
      network: xxxbridge
...

docker-compose build --build-arg HTTP_PROXY=http://www-proxy.yyyy:80 --build-arg HTTPS_PROXY=http://www-proxy.yyyy:80

【讨论】:

  • 不确定是否有版本更改,但我刚收到MSBUILD : error MSB1001:Unknown switch. Switch: --build-arg
【解决方案3】:

什么为我解决了这个问题:我将https://api.nuget.org 添加到 IE 中的受信任站点列表(设置 -> 安全 -> 受信任站点)。

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2021-02-28
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多