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


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

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

Укажите учетные данные входа для учетной записи частного реестра в \<username> полях и \<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
    

    Замените параметр <identity-name> назначенной пользователем управляемой сущности и используйте результат <client-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_USERNAMEDOCKER_REGISTRY_SERVER_PASSWORD. Из-за угроз для безопасности приложению не предоставляется ни одно из этих зарезервированных имен переменных.

Для контейнеров служб Интернета (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 в пользовательской файловой системе контейнера для сохранения файлов после перезапусков и их совместного использования между экземплярами. При использовании каталога C:\home пользовательский контейнер получает доступ к постоянному хранилищу данных. Помните, что данные, которые вы сохраняете в /home, вносят вклад в квоту дискового пространства, включенную в ваш план службы приложений.

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

Единственным исключением является C:\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 в области параметров контейнера приложения. Журналы логов усечены. Чтобы скачать все журналы, нажмите кнопку "Скачать".

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 в реестр, а затем проверьте функцию SSH веб-приложения на портале Azure.

Дополнительные сведения об устранении неполадок см. в блоге службы приложений Azure: включение SSH в веб-приложении Linux для контейнеров.

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

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

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

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-контейнеры сменяют многоконтейнерные приложения в службе приложений. Для новых служб см. руководство: Настройка сайдкар-контейнера для пользовательского контейнера в Службе приложений Azure. Сведения о существующих многоконтейнерных приложениях в Службе приложений см. в инструкции по переносу приложений 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" указывает на то, что путь не существует, и он сигнализирует службе приложений о том, что контейнер работоспособен и готов реагировать на запросы.