Поддержка док-станции Visual Studio не работает с CI / CD - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть решение, которое имеет следующие проекты:

  • 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

1 Ответ

0 голосов
/ 21 февраля 2019

Так что ответ на этот вопрос на самом деле очень прост.В конвейере CI просто измените контекст сборки на родительскую папку.

Чтобы создать локально, запустите его из родительской папки docker build -f SSDockerTest2\Dockerfile ., а затем он запустит его в контексте родительского каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...