Docker Compose构建中的Nuget包还原错误

时间:2018-04-22 08:08:50

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

我在使用docker-compose在代理后面构建时遇到了nugget restore错误。我在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

4 个答案:

答案 0 :(得分:2)

解决


事实证明这是一个网络问题。我在工作中使用公司防火墙,利用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的映像 要么 从不同的网络构建。

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

答案 1 :(得分:1)

您可以检查网络适配器索引。泊坞窗使用列表中的最后一个。如果断开连接,则将无法恢复软件包,因为图像无法通过互联网下载。

检查网络接口列表:

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

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

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

答案 2 :(得分:1)

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

以下解决方案对我有帮助:

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

  2. 在 Dockerfile 中添加以下几行:

    复制 ["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'

    运行 update-ca-certificates

它也可以用 DER certificate type 代替 PEM。

答案 3 :(得分:0)

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

我有小提琴打开,它从不试图点击URL。在这一点上,我缺乏想法。

我尝试创建另一个"模板"从一个简单的API /网站项目...它构建良好...我添加Nuget包,它突然失败。

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

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

PS4和我分享的一件事是,我们俩都有" dotnet sdk 2.1.104"