Я хочу создать образ Docker, который можно разместить в службах приложений Azure для Windows.Мое приложение основано на ASP.NET Core 2.1 и согласно официальному списку изображений образов .NET , я могу просто использовать microsoft/dotnet:2.1-aspnetcore-runtime
.
. Я могу собрать Dockerfile.на машине Windows успешно и смог запустить его там без проблем.Но после загрузки его в Docker Hub и установки его в качестве образа Docker службы приложений я получаю следующее сообщение об ошибке:
Невозможно запустить эту операционную систему / версию в контейнерах Windows.Максимальная поддерживаемая версия ОС - 10.0.14393.9999.
В соответствии с Документация по службам приложений Azure она должна поддерживать microsoft/dotnet:2.1-aspnetcore-runtime
в качестве одного из предустановленных родительских образов.
При проверке моего образа Docker я обнаружил, что используемое изображение кажется слишком новым для служб приложений Azure:
"Architecture": "amd64",
"Os": "windows",
"OsVersion": "10.0.17134.285" <-- too new
После некоторых исследований я обнаружил в этом сообщении блога, что службы приложений Azure в Windows могут принимать только microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-sac2016
образ.Поэтому я попытался восстановить образ Docker с помощью этих файлов.
На этот раз служба приложений приняла изображение, но не смогла его запустить, выдав следующие журналы:
02/10/2018 14:15:09.437 ERROR - Site: rothiewindockerdemo - Image pull reported error. Image: robinmanuelthiel/contosomaintenance-api:latest-windows-sac2016. failed to register layer: re-exec error: exit status 1: output: remove \\?\C:\DockerData\windowsfilter\93b716197958ceb58006ff3d978fcb3202f7866d00d6d8d69513cf0478a17a7f\UtilityVM\Files\Windows\servicing\Packages\Microsoft-UtilityVM-Core-Package~31bf3856ad364e35~amd64~~10.0.14393.0.cat: The process cannot access the file because it is being used by another process.
02/10/2018 14:15:09.437 INFO - Site: rothiewindockerdemo - Image: robinmanuelthiel/contosomaintenance-api:latest-windows-sac2016
Custom Registry: https://index.docker.io
02/10/2018 14:15:09.439 ERROR - Site: rothiewindockerdemo - Pull image completed but it was not found locally. Image: robinmanuelthiel/contosomaintenance-api:latest-windows-sac2016
02/10/2018 14:15:09.441 WARNING - Site: rothiewindockerdemo - Attempt 1 to start container was unsuccessful. Maximum attempts: 3.
02/10/2018 14:15:09.568 INFO - Site: rothiewindockerdemo - Purging after container failed to start
02/10/2018 14:15:09.582 INFO - Site: rothiewindockerdemo - Purging pending logs after stopping container
Каков правильный базовый образ Windows Docker для контейнеров Docker ASP.NET Core 2.1 в службах приложений Azure?
Это мое Dockerfile
:
#######################################################
# Step 1: Build the application in a container #
#######################################################
# Download the official ASP.NET Core SDK image
# to build the project while creating the docker image
FROM microsoft/dotnet:2.1-sdk as build
WORKDIR /app
# Restore NuGet packages
COPY *.csproj .
RUN dotnet restore
# Copy the rest of the files over
COPY . .
# Build the application
RUN dotnet publish --output /out/ --configuration Release
#######################################################
# Step 2: Run the build outcome in a container #
#######################################################
# Download the official ASP.NET Core Runtime image
# to run the compiled application
FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
# Open HTTP and HTTPS ports
EXPOSE 80
EXPOSE 443
# Copy the build output from the SDK image
COPY --from=build /out .
# Start the application
ENTRYPOINT ["dotnet", "MyApp.dll"]