Я уже больше недели пытаюсь запустить контейнер Windows с помощью Azure App Service. Сначала я предпочел просто использовать стандартный экземпляр контейнера, но, похоже, у вас есть только возможность публичной или частной сети, а не пользовательской (в отличие от контейнеров Linux). Похоже, если вы запускаете свой контейнер Windows в службе приложений, вы получаете те же сетевые возможности, что и на других веб-сайтах. Поддержка Azure для контейнеров Windows в App Servicesпочти год, но относительно немного ресурсов посвящено этому вопросу, за исключением самых простых сценариев.
Моя цель использования контейнера — запустить сторонний фоновый сервис Windows по требованию без накладных расходов виртуальной машины. Поскольку он использует службу приложений, я решил добавить конечную точку asp.net core rest для некоторой информации о состоянии. Мой контейнер основан на mcr.microsoft.com/windows/servercore:ltsc2019
. Я загружаю и устанавливаю .net и asp.net core (базовый образ имеет только .net framework), устанавливаю свои службы, собираю и запускаю веб-сайт, затем моей точкой входа является скрипт Powershell, который обновляет некоторые значения конфигурации и запускает конечную точку asp.net core, которая управляет службами.
Если я использую портал, я могу выбрать варианты контейнера или кода, Windows или Linux и начать работу сбазовое изображение быстрого старта, но мой собственный образ в Azure Container Registry не запускается должным образом. Я использую один изподдерживаемые базовые образы, и он отлично работает на моей локальной машине. В Azure он создает все, но никогда не запускается. Небольшое количество записей в журнале указывает на то, что он запускается, монтирует тома файловых ресурсов, а затем просто умирает:
- Создать контейнер для изображения
- Попытка запустить контейнер
- Запуск контейнера прошел успешно
- Контейнер запущен
- Вызовите утилиту настройки контейнера
- Настройка утилиты контейнера завершена
- Контейнер запущен
- Попытка остановить контейнер
- Попытка завершить контейнер
- Попытка удалить контейнер
- Контейнер успешно удален
Также странно, даже с изображением быстрого старта я не вижу фактического экземпляра контейнера. Предположительно, это потому, что он работает в App Service Plan напрямую, хотя ничего из этого не очень понятно. Из веб-приложения я могу перейти в App Service Plan (план контейнеров Windows), где в разделе Apps отображается одно приложение с типом "app,container,windows", но нигде я не могу найти доступ к просмотру журналов консоли или запуску оболочки, как я могу сделать с ресурсами типа Container Image. На некоторых снимках экрана, которые я видел, я вижу ссылку "Container Settings" под "Settings", которой у меня нет, но, возможно, она по какой-то причине предназначена только для контейнеров Linux.
Итак, как мне устранять неполадки контейнера при запуске в службе приложения? Я что-то где-то упускаю?
решение1
Диагностика
Ценную информацию по отладке можно найти, нажав на ссылку Diagnose & Solve Problems -> Container Initialization
в Azure Web App for Containers.
Куду
App Service поставляется с консолью отладки, которую вы можете использовать для отладки, исследования, загрузки файлов, а также конечных точек JSON для получения информации о вашей среде. Эта консоль называется Kudu Console или SCM Dashboard для вашего приложения.
Вы можете получить доступ к этой панели, перейдя по ссылке https://[Название вашего приложения].scm.azurewebsites.net/.
Вот некоторые из вещей, которые предоставляет Kudu:
- Параметры среды для консоли отладки диагностического дампа потока журнала приложения, в которой можно запускать командлеты PowerShell и основные команды DOS.
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-performance-degradation