Не удается запустить экземпляр образа docker в реестре контейнера azure - PullRequest
1 голос
/ 24 апреля 2020

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

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? Какой обходной путь? Это как-то связано с версией моего windows (я нахожусь на 10.0.18363 Build 18363) Моя система слишком новая для этого, чтобы работать, что кажется маловероятным? Кто-нибудь видел это?

1 Ответ

1 голос
/ 24 апреля 2020

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

Версия ОС

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

...