Как восстановить пакеты 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, которого достаточно для небольших внутренних лент).

Другие вопросы по тегам