#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