Iot Edge: создание образа Docker из нескольких проектов - PullRequest
1 голос
/ 05 марта 2019

Я могу успешно собрать и запустить в Visual Studio, но я получаю сообщение об ошибке при попытке создать образ докера (TestModule) из Visual Studio, которая ссылается на 2 проекта (Microsoft.Azure.Devices.Edge.Util + ModuleLib ). Есть идеи, что не так с моим dockerfile? Чтобы создать, я щелкаю правой кнопкой мыши на проекте> построить и выдвинуть краевые модули IoT (я использую инструмент расширения против).

проектов:

 -TestModule
       |--Dockerfile
 -Microsoft.Azure.Devices.Edge.Util
 -ModuleLib

TestModule.csproj

...
    <ItemGroup>
        <ProjectReference Include="..\Microsoft.Azure.Devices.Edge.Util\Microsoft.Azure.Devices.Edge.Util.csproj" />
        <ProjectReference Include="..\ModuleLib\Microsoft.Azure.Devices.Edge.ModuleUtil.csproj" />
      </ItemGroup>
...

Ошибки сборки:

Step 4/12 : COPY Microsoft.Azure.Devices.Edge.Util/*.csproj ./Microsoft.Azure.Devices.Edge.Util/
COPY failed: no source files were specified
[ERROR]: COPY failed: no source files were specified

UPDATE: * если вы попытаетесь построить это внутри DOCKERFILE, используя VS Code, файл не сможет получить доступ, потому что контекст докера настроен на доступ к папке модуля. Следовательно, правильная команда должна быть для установки контекста в корневой папке.

Запустите Powershell в корневой папке (заменил myacr.azurecr.io на свой контейнер):

docker build --rm -f .\TestModule\Dockerfile.windows-amd64 -t myacr.azurecr.io/testmodule:0.0.7-windows-amd64 .;if ($?) { docker push myacr.azurecr.io/testmodule:0.0.7-windows-amd64 }

Dockerfile в TestModule (Dockerfile.windows-amd64):

  FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app

COPY . .
RUN dotnet restore ./TestModule/TestModule.csproj

COPY . ./
RUN dotnet publish ./TestModule/TestModule.csproj -c Release -o out

FROM microsoft/dotnet:2.1-runtime-nanoserver-1809
WORKDIR /app
COPY --from=build-env /app/TestModule/out ./
ENTRYPOINT ["dotnet", "TestModule.dll"]

Я создал пакетный скрипт DockerBuild.bat в корневой папке проекта (заменил myacr.azurecr.io вашим контейнером), просто введите в качестве параметра имя модуля (в нижнем регистре) + версия:

 @echo off
  Rem Run docker build image and push to Azure Container


  IF "%~1"==""  (
      ECHO Missing module name parameter lowercase. Ex: DockerBuild.bat modulename
      EXIT
  )

  IF "%~2"==""  (
      ECHO Missing version parameter. Ex: DockerBuild.bat modulename version
      EXIT
  )

  set modulename=%~1
  set version=%~2

  echo Module name: %modulename%
  echo Version: %version%

  docker build --rm -f .\%modulename%\Dockerfile.windows-amd64 -t myacr.azurecr.io/%modulename%:%version%-windows-amd64 .
  docker push myacr.azurecr.io/%modulename%:%version%-windows-amd64

  echo The Docker build has completed
...