ASP.NET Основной образ docker сборки с общими библиотеками

#docker #dockerfile

#docker #dockerfile

Вопрос:

Я работаю в микросервисной среде, где между этими микросервисами есть общие библиотеки.

Эти библиотеки хранятся в другом месте на диске, в «общем» месте, и на них напрямую ссылаются эти микросервисы.

В .csproj такого микросервиса вы увидите что-то вроде этого.

 <ItemGroup>
   <ProjectReference Include="......Shared1.csproj" />
<ItemGropu>
 

Теперь в каждом из этих микросервисов у меня есть dockerfile

 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY . .
COPY ../../../Users/boris/Desktop/shared/Shared/Shared/Shared.csproj .
RUN dotnet restore "WebUi.csproj"

WORKDIR /src/.
RUN dotnet build "WebUi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebUi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
RUN ls
ENTRYPOINT ["dotnet", "WebUi.dll"]
 

при создании образа

 docker build -f dockerfile .
 

Я получаю

ОШИБКА [сборка 4/7] КОПИРОВАТЬ …… Users boris Desktop shared Shared Shared Shared.csproj .

[сборка 4/7] КОПИЯ ……Users boris Desktop shared Shared Shared Shared.csproj .: не удалось решить с помощью интерфейса dockerfile.v0: не удалось собрать LLB: не удалось вычислить ключ кэша: «/.. .. .. Users boris Desktop shared Shared Shared Shared.csproj» не найден: не найден PS C:.demoshangfire-dashboardWebUi > сборка docker -f .dockerfile -t web . [ ] Сборка 0.2с (10/18)

Я думаю, это из-за контекста сборки, но не уверен.

Есть идеи о том, как я могу это исправить?

Комментарии:

1. похоже, что ваш dockrfile не может разрешить путь ......UsersborisDesktopsharedSharedSharedShared.csproj . Вы можете запустить одноступенчатую сборку для тестирования, а затем объединить все в многоступенчатую сборку.

Ответ №1:

Хорошо, первым делом переименуйте dockerfile в Dockerfile . Далее, правильный ли путь в первую очередь? Я предполагаю csproj , что он существует в той же папке, что и ваш Dockerfile , и в вашем csproj , который вы используете, <ProjectReference Include="......Shared1.csproj" /> тогда как в используемом вами файле docker ../../../Users/boris/Desktop/shared/Shared/Shared/Shared.csproj , поэтому, если csproj И Dockerfile существуют в одном каталоге, путь просто неверен.

Комментарии:

1. почему dockerfile нужно переименовать в Dockerfile?

2. При проверке работоспособности @RajdeepDebnath возникла проблема, которая, похоже, исправлена для меня. Просто убедитесь, что это не какое-то странное поведение. Но корнем проблемы, по-видимому, является неправильный путь, который вы указали, который неверно относителен. Попробуйте добавить файл .txt и СКОПИРУЙТЕ его в папку над csproj

3. dockerfile не нужно переименовывать в Dockerfile