【问题标题】:Nuget package restore error in Docker Compose buildDocker Compose 构建中的 Nuget 包还原错误
【发布时间】:2018-10-02 11:33:58
【问题描述】:

在代理后面使用 docker-compose 构建时,我遇到了块恢复错误。我在 docker for windows 中设置了代理。 Nuget 恢复适用于命令行 dotnet restore 和 Visual Studio 调试,但不适用于 docker-compose

:\Program Files\dotnet\sdk\2.1.104\NuGet.targets(104,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [C:\src\WebApp.sln]
:\Program Files\dotnet\sdk\2.1.104\NuGet.targets(104,5): error :   An error occurred while sending the request. [C:\src\WebApp.sln]
:\Program Files\dotnet\sdk\2.1.104\NuGet.targets(104,5): error :   A connection with the server could not be established [C:\src\WebApp.sln]
ERROR: Service 'idenityapi' failed to build: The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; dotnet restore -nowarn:msb3202,nu1503' r
turned a non-zero code: 1

【问题讨论】:

    标签: docker nuget docker-compose dockerfile nuget-package-restore


    【解决方案1】:

    已解决:
    原来是网络问题。我在公司防火墙后面工作,它利用 TLS 数据包检查来分解 SSL 流量。调试时的构建过程在我的本地机器上以“我”的身份运行,但是,发布构建(docker-compose)实际上会拉下一个 aspnetcore-build docker 映像,将您的代码复制到 docker 容器,然后运行 ​​dotnet restore 以获得新鲜用于您的 docker 映像的 nuget 包。这些操作可以在项目的 Docker 文件中找到。容器内的这个“dotnet restore”在不同的安全环境下运行,因此被挂断了。由于 docker 网络的工作方式,我们跟踪了我很难到达的网络流量。提琴手没有赶上交通。使用wireshark,我们能够从设备级别捕获它并看到下降。它在我的家庭网络中继续失败的原因是由于我们的管理程序和网络的配置。

    解决方案:
    https://api.nuget.org/v3/index.json 添加防火墙规则(首选) 要么 在云端从 VSTS 构建映像 要么 从不同的网络构建。

    如果你能以同样的方式解决这个问题,请回帖?花了3天时间,我很好奇你的状态。

    【讨论】:

    • 我还是做不到。
    【解决方案2】:

    当我遇到这个问题时,dotnet restore 添加公司证书文件解决了这个问题。 (在您的情况下可能会或可能不会相同?)。在RUN dotnet restore 之前,我添加到容器的证书存储区,即

    ADD your-proxy-certificate-file.crt /usr/local/share/ca-certificates/your-proxy-certificate-file.crt
    RUN update-ca-certificates
    

    理论上,如果dotnet restore 在您的本地计算机上工作,那么您没有理由不能配置您的容器来工作(没有防火墙规则或更改网络!)。您基本上需要配置容器以使用与本地计算机相同的设置在代理后面工作。

    【讨论】:

    • @uosjeadad ..您能否详细说明什么是代理证书以及它在系统中的位置?请帮我添加以上几行..
    【解决方案3】:

    您可以检查网络适配器索引。 docker 使用列表中的最后一个。如果断开连接 - 您将无法恢复包,因为图像无法访问 Internet 下载。

    查看网络接口列表:

    ❯ Get-NetIPInterface -AddressFamily IPv4 | Sort-Object -Property InterfaceMetric -Descending
    

    更改 LAN 的索引(例如,将其移至 Wi-Fi 上方):

    ❯ Set-NetIPInterface -InterfaceAlias 'Local Area Connection* 1' -InterfaceMetric 100
    

    【讨论】:

      【解决方案4】:

      当公司 SSL 拦截阻止 nuget 包还原时,我遇到了类似的问题。但错误略有不同:“由于证书链中的错误,远程证书无效:PartialChain”

      以下解决方案帮助了我:

      1. Export Windows 证书,用于连接 PEM 格式的 SSL 代理;

      2. 在 Dockerfile 中添加以下行:

        COPY ["exported_windows_cert_path_and_name.cer", "/usr/local/share/ca-certificates/cert_name.cer"]

        运行 openssl x509 -inform PEM -in '/usr/local/share/ca-certificates/cert_name.cer' -out '/usr/local/share/ca-certificates/cert_name.crt'

        运行更新证书

      也可以用DER certificate type代替PEM。

      【讨论】:

        【解决方案5】:

        我现在也遇到同样的错误。我已经为此工作了2天,但无济于事。我已经确定这似乎不是与网络相关的问题。我可以在我的家用笔记本电脑上加载相同的项目并构建它。我把我的工作笔记本电脑带回家,它没有构建。这指出我的工作笔记本电脑有问题。

        我打开了提琴手,它从不尝试点击 URL。在这一点上,我没有什么想法可以做什么。

        我尝试从一个简单的 API/网站创建另一个“模板”项目……它构建得很好……我添加了 Nuget 包,但它突然失败了。

        我的错误信息与 PS4 完全相同。

        重现这一点的步骤很简单。 1) 创建一个新的 .NET Core Web 项目 2) 启用 Docker 支持(通过新项目向导或添加上下文菜单) 3) 选择释放模式 4) 点击播放/调试/开始按钮。

        我和 PS4 共享的一件事是我们都有“dotnet sdk 2.1.104”

        【讨论】:

        • 我怀疑我们的防病毒程序捕获了一些东西。我在 Windows 事件日志中看到它在之前捕获了一些东西。
        • 所以,这里实际发生的是 docker-compose 在构建时创建了一个短暂的容器。如果您确实执行“docker ps”,您可以看到容器假脱机,然后尝试从 Docker 容器中恢复包。错误消息实际上是说“在 Docker 容器中,我无法恢复”。仍在挖掘为什么....
        • 我尝试使用更新的 BUILD Image.. 这似乎也不起作用。 - FROM microsoft/aspnetcore-build:2.0.7-2.1.105-nanoserver-sac2016 AS build 我希望能解决它,但似乎没有。我也尝试了 1.0-2.0,但没有奏效。接下来停止它,在它运行时尝试进入容器,看看为什么构建容器不能 nuget restore
        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 2020-05-27
        • 2020-01-08
        • 1970-01-01
        相关资源
        最近更新 更多