Как восстановить пакеты nuget из сетевой папки в контейнере Linux Docker
Я пытаюсь построить решение.NET Core в контейнере Docker, но не могу получить dotnet restore
Команда на работу. Мне нужно использовать как локальный сетевой ресурс (простой репозиторий файловой системы), так и официальный репозиторий Nuget.
Мой конфиг nuget выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="Nuget Feed" value="https://api.nuget.org/v3/index.json" />
<add key="custom feed" value="//uvd-fs1.uvd.local/Install/UVPackages" />
</packageSources>
</configuration>
Я запускаю контейнер с помощью команды docker run -it --rm -v "$pwd\:/sln" microsoft/aspnetcore-build:latest
затем cd sln
а также dotnet restore ./UVAudit.sln
,
Это приводит к следующей ошибке:
/usr/share/dotnet/sdk/1.0.1/NuGet.targets(97,5): error : Failed to retrieve information about 'RavenDB.Client' from remote source '/uvd-fs1.uvd.local/Install/UVPackages'. [/sln/UVAudit.sln]
Я ожидаю, что пакет RavenDB будет восстановлен из официального канала, но если я удалю пользовательский источник пакета из файла nuget.config, разрешить будут только неофициальные пакеты. Это заставляет меня думать, что сообщение об ошибке немного вводит в заблуждение. Я также думаю, что /uvd-fs1.uvd.local/Install/UVPackages
часть должна быть на самом деле //uvd-fs1.uvd.local/Install/UVPackages
, но добавление дополнительных слешей ничего не делает. Есть идеи, если я делаю что-то не так или это похоже на ошибку? Я не эксперт по Linux, поэтому мне может не хватать какой-то базовой концепции.
Я также попытался изменить путь к хранилищу smb://uvd-fs1.uvd.local/Install/UVPackages
что привело к изменению сообщения об ошибке на:
/usr/share/dotnet/sdk/1.0.1/NuGet.targets(97,5): error : Failed to verify the root directory of local source 'smb://uvd-fs1.uvd.local/Install/UVPackages'. [/sln/UVAudit.sln]
/usr/share/dotnet/sdk/1.0.1/NuGet.targets(97,5): error : smb://uvd-fs1.uvd.local/Install/UVPackages [/sln/UVAudit.sln]
Я действительно не знаю, имеет ли это смысл пытаться, только одна из очень ограниченных подсказок, предоставляемых поиском в Google.
1 ответ
UNC пути (\\..
) - это прежде всего концепция Windows. Хотя основным протоколом для сети и путей является smb, клиент NuGet не будет его поддерживать - причина, по которой он работает в Windows, заключается в том, что файловая система API прозрачно обрабатывает пути UNC.
Если вы хотите надежно восстановить данные из док-контейнера, я предлагаю настроить ленту NuGet (для веб-сайтов asp.net имеется пакет NuGet NuGet.Server, которого достаточно для небольших внутренних лент).