В настоящее время я занимаюсь докеризацией микросервисного приложения aspnetcore, которое имеет 3 сервиса.Я хотел бы создать dockerfile для каждого сервиса и использовать docker-compose для его запуска, который уже реализован.Тем не менее, каждый раз, когда я publish
приложение dotnet помещаю в папку, а затем build
изображение отдельно, мне нравится включать сборку в файл Docker.
Я обнаружил, что этот вопрос очень похож намой вопрос asp.net core 2.0 - файл Docker решения для нескольких проектов , но разница для каждого сервиса, я ссылаюсь на core.library
(в котором есть общие файлы, которые используются в разных сервисах).
Структура проекта выглядит следующим образом:
- / root (содержит .sln)
- docker-compose
/ auth.service
/ search.service
- / common.library
Ниже приведен док-файл в auth.service
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["auth.service.csproj", "dotnetapp/"]
COPY ["Common.library.csproj", "Common.library/"]
RUN dotnet restore "auth.service.csproj"
COPY . .
WORKDIR "/src/auth.service"
RUN dotnet build "auth.service.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "auth.service.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "auth.service.dll"]
Все работает хорошо, кроме линии COPY ["Common.library.csproj", "Common.library/"]
.Выдает ошибку, как , не может найти файл , который является правильным.Common.library.csproj
не находится внутри каталога auth.service
.
Затем я попытался переписать это в copy ../Common.library/Common.library.csproj
, но так как мы не можем скопировать источник за пределы текущего каталога (так сказал докер), поэтомуэто не работает.
Я пытался изменить свойства проектных зависимостей common.library, чтобы скопировать local -> true, но это не работает.
Любая помощь будеточень ценю!