Поделиться через


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

В этой статье показано, как настроить пользовательский контейнер для запуска на Служба приложений Azure.

Узнайте о ключевых понятиях и получите инструкции по контейнеризации приложений Windows в Службе приложений.

Необходимые условия

Новые пользователи должны сначала ознакомиться с инструкцией для быстрого старта пользовательского контейнера и учебником.

Узнайте о ключевых понятиях и получите инструкции по контейнеризации приложений Linux в Службе приложений.

Необходимые условия

Новые пользователи должны сначала ознакомиться с инструкцией для быстрого старта пользовательского контейнера и учебником. Информацию о контейнерах-дополнениях см. в руководстве: Настройка контейнера-дополнения для пользовательского контейнерного приложения.

Примечание.

Использование сервисного принципала для аутентификации при извлечении образов контейнеров для Windows больше не поддерживается. Рекомендуется использовать управляемое удостоверение как для Windows, так и для контейнеров Linux.

Поддерживаемые родительские образы

Выберите правильный парентный образ (базовый образ) для платформы, которую вы хотите использовать для пользовательского образа Windows:

  • Чтобы развернуть приложения .NET Framework, используйте родительский образ на основе выпуска Windows Server Долгосрочный канал обслуживания.
  • Чтобы развернуть приложения .NET Core, используйте родительский образ на основе выпуска Windows Server Annual Channel.

Во время запуска приложения требуется некоторое время для скачивания родительского образа. Вы можете сократить время запуска с помощью одного из следующих родительских образов, которые уже кэшируются в Служба приложений Azure:

Изменение Docker-образа пользовательского контейнера

Используйте следующую команду, чтобы изменить текущий образ Docker на новый образ в существующем пользовательском контейнере:

az webapp config container set --name <app-name> --resource-group <group-name> --container-image-name <docker-hub-repo>/<image>

Замените <заполнители собственными значениями>.

Использование образа из частного реестра

Чтобы использовать образ из частного реестра, например Реестр контейнеров Azure, выполните следующую команду:

az webapp config container set --name <app-name> --resource-group <group-name> --container-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>

Укажите учетные данные входа для учетной записи частного реестра в <полях имени пользователя> и <пароля> .

Использование управляемого удостоверения для извлечения изображения из Реестр контейнеров Azure

Выполните следующие действия, чтобы настроить веб-приложение для извлечения из Реестр контейнеров Azure с помощью управляемой идентичности. На этих шагах используется системное управляемое удостоверение, но также можно использовать пользовательское управляемое удостоверение.

  1. Включите системное управляемое удостоверение для веб-приложения командой az webapp identity assign.

    az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsv
    

    Замените <имя> приложения именем приложения. Выходные данные команды, отфильтрованные с аргументами --query и --output, представляют собой идентификатор учетной записи службы назначенной идентичности.

  2. Получите идентификатор ресурса реестра контейнеров:

    az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
    

    Замените <имя> реестра именем реестра. Выходные данные команды, отфильтрованные аргументами --query и --output, — это идентификатор ресурса реестра контейнеров.

  3. Предоставьте управляемой идентификации разрешение на доступ к реестру контейнеров.

    az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
    

    Измените следующие значения:

    • <идентификатор служебного участника> с идентификатором служебного участника из az webapp identity assign команды.
    • <registry-resource-id с идентификатором> реестра контейнеров из az acr show команды.

    Дополнительные сведения об этих разрешениях см. в статье Что такое управление доступом на основе ролей в Azure?

  4. Настройте приложение для использования управляемого удостоверения для извлечения из Реестр контейнеров Azure.

    az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    Замените <имя> приложения именем веб-приложения.

    Подсказка

    Если вы используете консоль PowerShell для выполнения команд, экранируйте строки в аргументе --generic-configurations на этом и следующем шагах. Например: --generic-configurations '{\"acrUseManagedIdentityCreds\": true'.

  5. (Необязательно) Если приложение использует управляемое удостоверение, назначаемое пользователем, убедитесь, что удостоверение настроено в веб-приложении, а затем задайте acrUserManagedIdentityID свойство, чтобы указать его идентификатор клиента:

    az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
    

    Замените <имя управляемого удостоверения>, назначаемого пользователем, и используйте <идентификатор клиента> для настройки ID управляемого удостоверения, назначаемого пользователем.

    az  webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
    

Теперь веб-приложение использует управляемое удостоверение для извлечения из Реестр контейнеров Azure.

Использование образа из реестра, защищенного сетью

Чтобы подключиться к репозиторию и получить из него данные внутри виртуальной сети или локально, приложение должно интегрироваться с виртуальной сетью. Кроме того, требуется интеграция виртуальной сети для Реестр контейнеров Azure с частной конечной точкой. После настройки вашей сети и разрешения DNS активируйте маршрутизацию загрузки образа через виртуальную сеть. vnetImagePullEnabled Настройте параметр сайта:

az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]

Как устранить неполадки, если вы не видите обновленный контейнер

Если изменить параметры контейнера Docker, чтобы указать на новый контейнер, может потребоваться несколько минут, прежде чем приложение обслуживает HTTP-запросы из нового контейнера. Пока новый контейнер извлекается и запускается, служба приложений продолжает обслуживать запросы из старого контейнера. Служба приложений отправляет запросы только в новый контейнер после запуска и готова к получению запросов.

Узнайте, как хранятся образы контейнеров

При первом запуске пользовательского образа Docker в Службе приложений служба приложений выполняет docker pull команду и извлекает все слои изображений. Слои хранятся на диске так же, как и при использовании Локальной среды Docker. Каждый раз, когда приложение перезапускается, служба приложений docker pull выполняет команду. Он извлекает только измененные слои. Если изменений нет, Служба приложений использует существующие слои на локальном диске.

Если приложение изменяет вычислительные ресурсы по какой-либо причине (например, смена ценовых уровней), служба приложений должна снова извлечь все слои. То же самое верно, если вы увеличиваете масштаб, чтобы добавить больше экземпляров. Кроме того, в редких случаях экземпляры приложения могут изменяться без операции масштабирования.

Настройка номера порта

По умолчанию служба приложений предполагает, что пользовательский контейнер прослушивает порт 80. Если контейнер прослушивает другой порт, настройте соответствующим образом параметр WEBSITES_PORT приложения в приложении Службы приложений. Его можно задать с помощью Azure Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

В настоящее время Служба приложений позволяет контейнеру предоставлять для HTTP-запросов только один порт.

Настройка переменных среды

Пользовательский контейнер может использовать переменные среды, которые необходимо предоставлять извне. Их можно передать с помощью Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

При запуске приложения параметры приложения службы приложений автоматически внедряются в процесс в качестве переменных среды. Вы можете проверить переменные среды контейнера с помощью URL-адреса https://<app-name>.scm.azurewebsites.net/Env.

Подключаясь по SSH к контейнеру с пользовательским образом Docker, вы можете увидеть только несколько переменных среды, если попытаетесь использовать такие команды, как env или printenv. Чтобы просмотреть все переменные среды в контейнере, например те, которые передаются в приложение для использования среды выполнения, добавьте эту строку в скрипт точки входа:

eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)

См. полный пример.

Если приложение использует образы из частного реестра или из Docker Hub, учетные данные для доступа к репозиторию сохраняются в переменных среды: DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAME и DOCKER_REGISTRY_SERVER_PASSWORD. Из-за угроз для безопасности приложению не предоставляется ни одно из этих зарезервированных имен переменных.

Для контейнеров Internet Information Services (IIS) или .NET Framework (версии 4.0 или более поздней) учетные данные автоматически внедряются в System.ConfigurationManager как параметры приложения и строки подключения .NET, применяемые службой приложений. Для всех других языков или платформ они предоставляются в качестве переменных среды для процесса с одним из следующих префиксов:

  • APPSETTING_
  • SQLCONTR_
  • MYSQLCONTR_
  • SQLAZURECOSTR_
  • POSTGRESQLCONTR_
  • CUSTOMCONNSTR_

Этот метод можно использовать для одноконтейнерных или многоконтейнерных приложений, где переменные среды указываются в файле docker-compose.yml .

Использование постоянного общего хранилища

Вы можете использовать каталог C:\home в пользовательской файловой системе контейнера для сохранения файлов после перезапусков и их совместного использования между экземплярами. При использовании каталога C:\home пользовательский контейнер получает доступ к постоянному хранилищу данных.

  • Если постоянное хранилище отключено, записи C:\home в каталог не сохраняются во всех перезапусках приложения или в нескольких экземплярах.
  • Если постоянное хранилище включено, все записи C:\home в каталог сохраняются.

Все экземпляры масштабируемого приложения могут получить к ним доступ. При запуске контейнера, если какие-либо файлы присутствуют в постоянном хранилище, они перезаписывают любое содержимое в C:\home каталоге контейнера.

Единственным исключением является C:\home\LogFiles каталог. В этом каталоге хранятся журналы контейнеров и приложений. Папка всегда сохраняется при перезапуске приложения, если ведение журнала приложений включено с параметром файловой системы , независимо от того, включено ли постоянное хранилище. Другими словами, при включении или отключении постоянного хранилища он не влияет на поведение ведения журнала приложений.

По умолчанию постоянное хранилище включено в пользовательских контейнерах Windows. Чтобы отключить его, установите параметр приложения WEBSITES_ENABLE_APP_SERVICE_STORAGE на false, используя Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}

Вы можете использовать каталог /home в пользовательской файловой системе контейнера для сохранения файлов после перезапусков и их совместного использования между экземплярами. При использовании каталога /home пользовательский контейнер получает доступ к постоянному хранилищу данных. Помните, что данные, которые вы сохраняете в /home, вносят вклад в квоту дискового пространства, включенную в ваш план службы приложений.

  • Если постоянное хранилище отключено, записи /home в каталог не сохраняются во всех перезапусках приложения или в нескольких экземплярах.
  • Если постоянное хранилище включено, все записи /home в каталог сохраняются.

Все экземпляры масштабируемого приложения могут получить к ним доступ. При запуске контейнера, если какие-либо файлы присутствуют в постоянном хранилище, они перезаписывают любое содержимое в /home каталоге контейнера.

Единственным исключением является /home/LogFiles каталог. В этом каталоге хранятся журналы контейнеров и приложений. Папка всегда сохраняется при перезапуске приложения, если ведение журнала приложений включено с параметром файловой системы , независимо от того, включено ли постоянное хранилище. Другими словами, при включении или отключении постоянного хранилища он не влияет на поведение ведения журнала приложений.

Рекомендуется записывать данные в /home или смонтированный путь к хранилищу Azure. Данные, записываемые за пределами этих путей, не сохраняются во время перезапуска. Данные сохраняются в управляемом платформой дисковом пространстве узла отдельно от квоты хранилища файлов службы приложений.

По умолчанию постоянное хранилище отключено в пользовательских контейнерах Linux. Чтобы включить его, задайте значение параметра приложения WEBSITES_ENABLE_APP_SERVICE_STORAGE на true с помощью Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}

Примечание.

Вы также можете настроить собственное постоянное хранилище.

Обнаружение сеанса HTTPS

Служба приложений завершает TLS на фронтенде. Это означает, что запросы TLS никогда не попадают в приложение. Вам не нужно и не следует реализовывать поддержку TLS в приложении.

Фронтенды находятся в центрах обработки данных Azure. Если вы используете TLS с приложением, ваш трафик через Интернет всегда безопасно зашифрован.

Настройка внедрения ASP.NET ключа компьютера

Во время запуска контейнера ключи автоматически создаются и внедряются в контейнер в качестве ключей компьютера для ASP.NET криптографических подпрограмм. Эти ключи можно найти в контейнере, выполнив поиск следующих переменных среды: MACHINEKEY_Decryption, , MACHINEKEY_DecryptionKeyMACHINEKEY_ValidationKeyи MACHINEKEY_Validation.

Новые ключи при каждом перезапуске могут сбрасывать аутентификацию форм ASP.NET и состояние представления, если ваше приложение от них зависит. Чтобы предотвратить автоматическое повторное создание ключей, задайте их вручную в качестве параметров приложения Службы приложений.

Подключение к контейнеру

Чтобы подключиться к контейнеру Windows непосредственно для задач диагностики, перейдите к https://<app-name>.scm.azurewebsites.net/ и выберите параметр SSH. Этот параметр устанавливает прямой сеанс SSH, в котором можно выполнять команды внутри контейнера.

  • Она работает отдельно от графического браузера над ним, в котором отображаются только файлы в общем хранилище.
  • В масштабируемом приложении сеанс SSH подключается к одному из экземпляров контейнера. Вы можете выбрать другой экземпляр из раскрывающегося списка экземпляров в верхнем меню Kudu.
  • За исключением изменений в общем хранилище, любые изменения, внесенные в контейнер из сеанса SSH, не сохраняются при перезапуске приложения. Эти изменения не являются частью образа Docker. Чтобы сохранить такие изменения, как параметры реестра и установка программного обеспечения, сделайте их частью Dockerfile.

Доступ к журналам диагностики

Служба приложений ведет журнал действий Docker-хоста и активности внутри контейнера. Журналы из узла Docker (журналы платформы) включены по умолчанию. Необходимо вручную включить журналы приложений или журналы веб-сервера из контейнера. Дополнительные сведения см. в разделах Включение журнала приложений и Включение журнала веб-сервера.

Доступ к журналам Docker можно получить несколькими способами:

портал Azure

Журналы Docker отображаются на портале Azure на панели Container Settings области приложения. Журналы логов усечены. Чтобы скачать все журналы, нажмите кнопку "Скачать".

Kudu

Чтобы просмотреть отдельные файлы журналов, перейдите к https://<app-name>.scm.azurewebsites.net/DebugConsole папке LogFiles и выберите ее. Чтобы скачать весь LogFiles каталог, щелкните значок скачивания слева от имени каталога. Вы также можете получить доступ к этой папке с помощью FTP-клиента.

По умолчанию невозможно получить доступ к C:\home\LogFiles папке в терминале SSH, так как постоянное общее хранилище не включено. Чтобы включить такое поведение в консольном терминале, активируйте постоянное общее хранилище.

Если вы пытаетесь скачать журнал Docker, который сейчас используется с помощью FTP-клиента, может возникнуть ошибка из-за блокировки файла.

Kudu API

Перейдите непосредственно на https://<app-name>.scm.azurewebsites.net/api/logs/docker, чтобы просмотреть метаданные журналов Docker. Возможно, вы увидите несколько файлов журнала. Можно использовать свойство href для непосредственной загрузки файла журнала.

Чтобы скачать сразу все журналы в одном ZIP-файле, откройте страницу https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip.

Настройка памяти контейнера

По умолчанию все контейнеры Windows, развернутые в Служба приложений Azure, настроены ограничения памяти. В следующей таблице перечислены настройки по умолчанию для каждого SKU плана App Service.

SKU плана службы приложений Ограничение памяти по умолчанию для каждого приложения (в МБ)
P1v3 1024
P1Mv3 1024
P2v3 1536
P2Mv3 1536
P3v3 2048
P3Mv3 2048
P4Mv3 2560
P5Mv3 3072

Это значение можно изменить, указав параметр приложения WEBSITE_MEMORY_LIMIT_MB в Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}

Значение определяется в мегабайтах (МБ) и должно быть меньше и равно общей физической памяти узла. Например, в плане службы приложений с 8 ГБ ОЗУ совокупная сумма WEBSITE_MEMORY_LIMIT_MB для всех приложений не может превышать 8 ГБ. Дополнительные сведения о доступном объеме памяти см. в плане обслуживания premium версии 3 в ценах на службу приложений.

Настройка количества вычислительных ядер

По умолчанию контейнер Windows выполняется со всеми доступными ядрами ценовой категории. Возможно, потребуется уменьшить число ядер, используемых промежуточным слотом. Чтобы уменьшить количество ядер, которые использует контейнер, задайте WEBSITE_CPU_CORES_LIMIT для параметра приложения предпочтительное количество ядер. Его можно задать с помощью Cloud Shell.

В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}

Подсказка

Обновление параметра приложения активирует автоматическую перезагрузку, что приводит к минимальному простою. Для рабочего приложения рассмотрите возможность переключения его в промежуточный слот. Измените параметр приложения в промежуточном слоте, а затем верните его обратно в рабочую среду.

Чтобы проверить измененный номер, откройте сеанс SSH с помощью портала Azure или портала Kudu (https://<app-name>.scm.azurewebsites.net/webssh/host). Введите следующие команды с помощью PowerShell. Каждая команда возвращает число.

Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.

Процессоры могут быть многоядерными или с поддержкой технологии Hyper-Threading. Чтобы узнать, сколько ядер доступно, см. план службы premium версии 3 в ценах на службу приложений.

Настройка поведения пинга работоспособности системы

Служба приложений считает, что контейнер успешно запущен, если он запускается и отвечает на HTTP-сигнал. Запрос проверки работоспособности содержит заголовок User-Agent= "App Service Hyper-V Container Availability Check". Если контейнер запускается, но не отвечает на запросы через определенное время, служба приложений регистрирует событие в журнале Docker.

Если приложение является ресурсоемким, контейнер может не реагировать на http-связь вовремя. Чтобы управлять тем, что происходит при сбое http-ping, задайте CONTAINER_AVAILABILITY_CHECK_MODE параметр приложения. Его можно задать с помощью Cloud Shell. В Bash используйте следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"

В PowerShell используйте следующую команду:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}

В таблице ниже приведены возможные значения.

Значение Description
Repair Перезапустите контейнер после трех последовательных проверок доступности.
ReportOnly Значение по умолчанию. Сообщите о контейнере в журналах Docker после трех последовательных проверок доступности, но не перезагружайте его.
Off Доступность не проверяется.

Поддержка групповых управляемых учетных записей служб

Учетные записи управляемых служб группы не поддерживаются в контейнерах Windows в Службе приложений.

Включение SSH

Вы можете использовать Secure Shell (SSH) для удаленного выполнения административных команд из терминала командной строки. Чтобы включить консоль SSH на портале Azure с пользовательскими контейнерами, выполните следующие действия.

  1. Создайте стандартный sshd_config файл со следующим содержимым и поместите его в корневой каталог проекта приложения:

    Port 			2222
    ListenAddress 		0.0.0.0
    LoginGraceTime 		180
    X11Forwarding 		yes
    Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
    MACs hmac-sha1,hmac-sha1-96
    StrictModes 		yes
    SyslogFacility 		DAEMON
    PasswordAuthentication 	yes
    PermitEmptyPasswords 	no
    PermitRootLogin 	yes
    Subsystem sftp internal-sftp
    

    Примечание.

    Этот файл настраивает OpenSSH и должен включать следующие элементы, чтобы обеспечить соответствие функции SSH на портале Azure:

    • Значение Port должно быть установлено в 2222.
    • Значения Ciphers должны содержать по крайней мере один элемент в этом списке: aes128-cbc, 3des-cbcили aes256-cbc.
    • Значения MACs должны содержать по крайней мере один элемент в этом списке: hmac-sha1 или hmac-sha1-96.
  2. Создайте скрипт точки входа с именем entrypoint.sh или измените существующий файл точки входа. Добавьте команду, чтобы запустить службу SSH, а также команду запуска приложения. В следующем примере показано, как запустить приложение Python. Замените последнюю команду в соответствии с языком проекта или стеком:

    #!/bin/sh
    set -e
    service ssh start
    exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  3. Добавьте следующие инструкции в Dockerfile в соответствии с распределением базового образа. Эти инструкции копируют новые файлы, устанавливают сервер OpenSSH, задают правильные разрешения и настраивают настраиваемую точку входа и предоставляют порты, необходимые приложению и серверу SSH соответственно:

    COPY entrypoint.sh ./
    
    # Start and enable SSH
    RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd \
        && chmod u+x ./entrypoint.sh
    COPY sshd_config /etc/ssh/
    
    EXPOSE 8000 2222
    
    ENTRYPOINT [ "./entrypoint.sh" ] 
    

    Примечание.

    Корневой пароль должен быть именно Docker! потому, что служба приложений использует ее для предоставления доступа к сеансу SSH с контейнером. Эта конфигурация не допускает внешние подключения к контейнеру. Порт 2222 контейнера доступен только в мостовой сети частной виртуальной сети. Злоумышленник в Интернете не может получить доступ к нему.

  4. Перестройте и отправьте образ Docker в реестр, а затем проверьте функцию Web App SSH на портале Azure.

Дополнительные сведения об устранении неполадок см. в блоге Служба приложений Azure Troubleshooting.

Доступ к журналам диагностики

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

Чтобы включить ведение журнала контейнеров, выполните следующую команду:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Замените значения <app-name> и <resource-group-name> на имена, подходящие для вашего веб-приложения.

После включения ведения журнала контейнеров выполните следующую команду, чтобы просмотреть поток журналов:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Если журналы консоли не отображаются немедленно, повторите попытку через 30 секунд.

Чтобы остановить потоковую передачу журналов в любое время, используйте сочетание клавиш CTRL+C.

Настройка приложений с несколькими контейнерами

Примечание.

Функция Docker Compose будет прекращена 31 марта 2027 г. Sidecar-контейнеры сменяют многоконтейнерные приложения в службе приложений. Сведения о новых сервисах см. в руководстве по настройке сайдкар-контейнера для пользовательского контейнерного приложения. Сведения о существующих многоконтейнерных приложениях в Службе приложений см. в инструкции по переносу приложений Docker Compose на функцию sidecar.

Использование постоянного хранилища в Docker Compose

Для правильной работы приложений с несколькими контейнерами, таких как WordPress, требуется постоянное хранилище. Чтобы включить постоянное хранилище, конфигурация Docker Compose должна указывать на расположение хранилища за пределами контейнера. Изменения в местах хранения внутри контейнера не сохраняются после перезапуска приложения.

Чтобы включить постоянное хранилище, задайте WEBSITES_ENABLE_APP_SERVICE_STORAGE параметр приложения. Используйте команду az webapp config appsettings set в Cloud Shell.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

В файле docker-compose.yml сопоставьте параметр volumes с ${WEBAPP_STORAGE_HOME}.

WEBAPP_STORAGE_HOME — это переменная среды в службе приложений, которая сопоставляется с постоянным хранилищем для приложения. Например:

wordpress:
  image: <image name:tag>
  volumes:
  - "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
  - "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
  - "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"

Ограничения предварительной версии

В настоящее время многоконтейнерные приложения доступны в режиме предварительной версии. Следующие функции платформы Служба приложений не поддерживаются.

  • Проверка подлинности или авторизация
  • Управляемые идентичности
  • Общий доступ к ресурсам независимо от источника (CORS)
  • Интеграция виртуальной сети с сценариями Docker Compose

Docker Compose на Служба приложений Azure в настоящее время имеет ограничение в 4000 символов.

Параметры Docker Compose

В следующих разделах показаны поддерживаемые и неподдерживаемые параметры конфигурации Docker Compose.

Поддерживаемые параметры

Неподдерживаемые параметры

  • build (запрещено)
  • depends_on (игнорируется)
  • networks (игнорируется)
  • secrets (игнорируется)
  • Порты, отличные от 80 и 8080 (игнорируемые)
  • Переменные среды по умолчанию, такие как $variable и ${variable} (в отличие от Docker)

Ограничения синтаксиса

  • Первый оператор YAML в файле всегда должен быть version x.x.
  • В разделе портов числа должны быть в кавычках.
  • Раздел image > volume должен быть процитирован и не может иметь определения разрешений.
  • Раздел томов не может содержать пустую фигурную скобку после имени тома.

Примечание.

Любые другие параметры, которые явно не упоминаются, игнорируются в предварительной версии.

Игнорировать сообщение робота933456 в журналах

В журналах контейнеров может появиться следующее сообщение:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Это сообщение можно проигнорировать. /robots933456.txt — это фиктивный URL-путь. Служба приложений использует ее для проверки того, может ли контейнер обслуживать запросы. Ответ об ошибке "404" указывает на то, что путь не существует, и он сигнализирует службе приложений о том, что контейнер работоспособен и готов реагировать на запросы.