Какой правильный образ Windows Base для контейнеров Docker ASP.NET Core 2.1 в службах приложений Azure - PullRequest
0 голосов
/ 02 октября 2018

Я хочу создать образ 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"]

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Проблема заключается в том, что microsoft/dotnet:2.1-aspnetcore-runtime является базовым образом для нескольких архитектур.Это означает, что Docker build выберет лучшую архитектуру для вашего локального компьютера (компьютера, на котором вы создаете образ Docker).Я предполагаю, что на вашем локальном компьютере установлено обновление для Windows 10 апреля 2018 года (версия 1803 - чья сборка 17134,407).На данный момент мы поддерживаем только образы, основанные на Windows Server 2016 (версия 1709, до номера сборки 14393.XX).

Чтобы «форсировать» определенную версию, используйте вместо этого этот базовый образ:microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-sac2016.Вы можете проверить все доступные теги в https://hub.docker.com/r/microsoft/dotnet/

. Об этом мы поговорим специально в нашей документации.

0 голосов
/ 24 января 2019

Ответ выше, помеченный как ответ, неверен.Это наводит вас на мысль, что использование microsoft / dotnet: 2.1-aspnetcore-runtime-nanoserver-sac2016 решит ваши проблемы, но это не так.Я проверил это на экземплярах Azure Container, и оно не работает.

Решения таковы: когда вы получаете OsVersionNotSupported, это означает, что образ был создан с версией Windows, которая не поддерживается, и Microsoft в настоящее время не поддерживаетлюбые версии SAC (SAC - полугодовой канал).Таким образом, версии как 1709 и 1803 не будут работать.Также приведенное выше «решение» не сработает, поскольку оно использует этот тег SAC2016.

Для всех тегов, которые вы можете использовать в файле Docker, перейдите сюда: https://github.com/dotnet/dotnet-docker/blob/master/TAGS.md

Вынужно перейти на https://docs.microsoft.com/en-us/azure/container-instances/container-instances-troubleshooting и прочитать раздел «Версия ОС образа не поддерживается».В нем четко указано, что вам необходимо «... всегда развертывать образы на базе Windows Server 2016 (LTSC) ...».

0 голосов
/ 03 октября 2018

Важно отметить, что контейнеры Windows в службе приложений в настоящее время находятся в режиме предварительного просмотра.

Проверка на портале "Невозможно запустить эту операционную систему / версию в контейнерах Windows. Максимальная поддерживаемая версия ОС - 10.0.14393.9999."отображается потому, что мы запускаем серверы с Windows Server 2016 RS1 и в настоящее время не можем запускать контейнеры для RS3 +.В настоящее время мы работаем над тем, чтобы включить их, но у нас нет ETA для совместного использования.

Если проверка прошла успешно, это означает, что указанное изображение должно работать нормально, а проблема, с которой вы сталкиваетесь, ненапрямую связано с изображением.Это ошибка в платформе, и она похожа на проблему, о которой сообщалось здесь: https://github.com/Microsoft/hcsshim/issues/155

Мы продолжим расследование и благодарим за сообщение о проблеме

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