Я могу успешно собрать и запустить в 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