Я настраиваю очень простую сборку проекта .NET Standard с использованием новейшего образа microsoft / dotnet sdk (microsoft/dotnet:2.2.104-sdk-alpine3.8
).
Это для миграции существующего кода и существующей инфраструктуры сборки вновый репозиторий и инфраструктура сборки (GitLab (не очень важно здесь)).
Новая инфраструктура сборки, конечно, использует Docker.Но мне также нужно иметь возможность собираться на моем локальном Windows 10 с помощью Docker (это нужно, чтобы доказать, что ПО можно собирать и без GitLab, не будучи зависимым от определенного компьютера сборки).
Что у меня естьПопытка состоит в том, чтобы просто смонтировать папку моего проекта в образ докера и затем запустить dotnet restore
.Я делаю это в интерактивном режиме, чтобы понять, что происходит:
docker run -it --rm --volume c:\projects\test-project`:/project microsoft/dotnet:2.2.104-sdk-alpine3.8
А затем внутри контейнера:
cd project
dotnet restore TestProject.sln
Мое решение очень простое.Выглядит так:
test-project/
src/
ClassLibrary1/
ClassLibrary1.csproj
TestProject.sln
, где ClassLibrary1.csproj
выглядит так (просто ссылается на json.net):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
</ItemGroup>
</Project>
Вот и все.
Я использую:
- Windows 10 Enterprise Version 1709
- Docker Desktop Community Версия 2.0.0.3 (31259)
Ожидаемый результат заключается в том, что восстановление dotnet должно работатьбез проблем.
Фактический результат меня удивляет:
/project # dotnet restore TestProject.sln
Restoring packages for /project/src/ClassLibrary1/ClassLibrary1.csproj...
Installing Newtonsoft.Json 12.0.1.
Generating MSBuild file /project/src/ClassLibrary1/obj/ClassLibrary1.csproj.nuget.g.props.
/usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): error : Access to the path '/project/src/ClassLibrary1/obj/8a35f086-c8be-4d31-93df-14c254b9be6c.tmp' is denied. [/project/TestProject.sln]
/usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): error : Permission denied [/project/TestProject.sln]
У кого-нибудь есть идеи, почему это не работает, как я ожидаю?Я не должен быть в состоянии сделать восстановление на моем подключенном томе, как это?
Примечание: Если я запускаю ту же самую команду восстановления dotnet непосредственно с моего компьютера с Windows 10, все работает должным образом.
ОБНОВЛЕНИЕ
Эта проблема возникает только при запуске контейнера Linux в Docker с использованием «Режим контейнера Windows (включены экспериментальные функции)».Меня сбивает с толку то, что я все еще могу создавать и записывать новые файлы, добавлять к существующим файлам и т. Д. В подключенной папке из контейнера.Как это может быть?