Не удается запустить экземпляр образа докера в реестре контейнеров Azure

Я создал простое базовое веб-приложение asp.net, используя шаблоны Visual Studio. Затем я создал файл докера, который выглядит так:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "WebApplication.dll"]

Затем я создал образ из этого, используя:

docker build -t webapplication:dev .

а затем создал и запустил контейнер из этого, используя:

docker run -d -p 8080:80 --name myapp webapplication:dev

Все это работает локально. Затем я попытался отправить это в реестр контейнеров Azure, и он был успешно отправлен. Однако, когда я пытаюсь запустить экземпляр этого контейнера, я получаю сообщение об ошибке в Azure: «Поддерживаемые версии Windows: '10 .0.14393,10.0.17763 '»

Я не понимаю, почему я получаю эту ошибку? Изображение работает локально (я могу проверить это, перейдя по адресу localhost: 8080 и убедившись, что получаю правильный ответ, что я и делаю). Это как-то связано с ACR? Какое обходное решение? Это как-то связано с версией моих окон (я использую 10.0.18363, сборка 18363). Моя система слишком нова, чтобы это работало, что кажется маловероятным? Кто-нибудь видел это?


person Ilyas    schedule 24.04.2020    source источник


Ответы (1)


Для контейнеров Windows версия ОС на хосте должна соответствовать версии ОС в контейнере. Вы должны выбрать подходящий базовый образ, чтобы ваш контейнер мог работать в Azure. В https://samcogan.com/windows-containers-and-azure говорится:

Версия ОС

Из-за ограничений в том, как Windows реализует среду выполнения контейнера, вам необходимо, чтобы на главном компьютере работала та же версия Windows, что и в вашем контейнере. Я имею в виду не просто одну семью, а одну и ту же версию. Таким образом, если на вашем хосте работает Server 2016 v1803, тогда ваши контейнеры также должны запускать Server 2016 v1803, они не могут работать с v1709. Это очень проблематично, так как требует перекомпоновки образов при каждом изменении ОС хоста. Это еще более проблематично для тех, кто пытается использовать облачных провайдеров, поскольку часто вы не знаете, какая ОС работает на машинах, на которых вы размещены. Вы можете решить эту проблему, запустив свои контейнеры как контейнеры HyperV, которые заключают ваш контейнер в тонкую виртуальную машину, чтобы абстрагироваться от ОС, но это добавляет сложности.

person Moisei    schedule 24.04.2020