Зависимость проекта не обнаружена при запуске команды сборки DockerFile в DevOps Azure - PullRequest
0 голосов
/ 02 февраля 2019

Это Dockerfile, сгенерированный VS2017.Я немного изменил его использование в DevOps Azure

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["WebApi.csproj", "WebApi/"]
COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProj.Common/"]
RUN dotnet restore "MyProject.WebApi/MyProject.WebApi.csproj"
COPY . .
WORKDIR "/src/MyProject.WebApi"
RUN dotnet build "MyProject.WebApi.csproj" -c Release -o /app

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

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

Структура решения

MyProject.sln
   -MyProject.Common
     ...
   -MyProject.WebApi
       ...
       Dockerfile

Я создал конвейер сборки в DevOps Azure для запуска Docker Build со следующими шагами:

  1. Шаг получения исходников из репозитория Azure Git
  2. Задание агента (Hosted Ubuntu 1604)
  3. Сценарий командной строки docker build -t WebApi .

У меня естьэта ошибка

2019-02-02T18:14:33.4984638Z  ---> 9af3faec3d9e
2019-02-02T18:14:33.4985440Z Step 7/17 : COPY ["./MyProject.Common/MyProject.Common.csproj", "MyProject.Common/"]
2019-02-02T18:14:33.4999594Z COPY failed: stat /var/lib/docker/tmp/docker-builder671248463/MyProject.Common/MyProject.Common.csproj: no such file or directory
2019-02-02T18:14:33.5327830Z ##[error]Bash exited with code '1'.
2019-02-02T18:14:33.5705235Z ##[section]Finishing: Command Line Script

Прикрепленный снимок экрана с используемым рабочим каталогом enter image description here

Я не понимаю, нужно ли что-то менять внутри Dockerfile или в консольном скриптенаступить на DevOps

1 Ответ

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

Это просто догадка, но, учитывая, что ваш Dockerfile находится в MyProject.WebApi и вы хотите скопировать файлы из MyProject.Common, находящегося на том же уровне, вам может потребоваться указать другой корневой контекстный каталог, когдавыполняется docker build:

docker build -t WebApi -f Dockerfile ../

Когда Docker создает образ, он собирает контекст - список файлов, которые доступны во время сборки и могут быть скопированы в образ.

Когда вы запускаете docker build -t WebApi . он запускается внутри каталога MyProject.WebApi и все файлы в каталоге . (если у вас нет .dockerignore file), который в данном случае равен MyProject.WebApi, включены в контекст.Но MyProject.Common не является частью контекста, и поэтому вы ничего не можете скопировать из него.

Надеюсь, это поможет

РЕДАКТИРОВАТЬ: Возможно, вам не нужно указывать Working Directory (показано на скриншоте), тогда команда изменится на:

docker build -t WebApi -f MyProject.WebApi/Dockerfile .

В этом случае Docker будет использовать Dockerfile, расположенный внутри MyProject.WebApi, и включит в контекст все файлы, принадлежащие решению.

Вы также можете прочитать о контексте в Расширенное описание для команды docker build в официальной документации .

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