У меня есть решение, которое имеет следующие проекты:
- ServiceStackDockerTest
- ServiceStackDockerTest.ServiceModel
- ServiceStackDockerTest.ServiceInterface
Когда я добавляю поддержку Docker в Visual Studio, это добавляемый файл Docker.
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ServiceStackDockerTest/ServiceStackDockerTest.csproj ServiceStackDockerTest/
COPY ServiceStackDockerTest.ServiceModel/ServiceStackDockerTest.ServiceModel.csproj ServiceStackDockerTest.ServiceModel/
COPY ServiceStackDockerTest.ServiceInterface/ServiceStackDockerTest.ServiceInterface.csproj ServiceStackDockerTest.ServiceInterface/
RUN dotnet restore ServiceStackDockerTest/ServiceStackDockerTest.csproj
COPY . .
WORKDIR /src/ServiceStackDockerTest
RUN dotnet build ServiceStackDockerTest.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish ServiceStackDockerTest.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ServiceStackDockerTest.dll"]
Он добавляет файл Docker внутри запускаемого проекта (/ServiceStackDockerTest
).
Это работает отличнохорошо внутри визуальной студии.Образ строится и запускается, когда я отлаживаю и ударил мои точки останова.
Однако, когда я пытаюсь построить этот образ нормально, используя docker, он не работает, так как не может найти путь к файлам .csproj.
Я думаю, это происходит потому, что Visual Studio использует общий доступ к томам, поэтому у него есть доступ к родительским папкам или он изменяет область, в которой каким-либо образом запускается Dockerfile.
Однако в моем конвейере CI он работаетdocker build
on ServiceStackDockerTest/Dockerfile
, которая копирует эту папку в Docker и не имеет доступа к своим родительским папкам.Все пути в VS dockerfile - от родительского каталога до места расположения файла Docker.
Почему Microsoft встроила такую поддержку в свою поддержку?Конечно, сборка dockerfile внутри конвейера CI - обычная задача.
Каков наилучший способ исправить это, чтобы я все еще мог отлаживать внутри контейнера с живой перезагрузкой внутри Visual Studio, но также создавать образ в моем конвейере CI