Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить пользовательский контейнер для работы в Службе приложений Azure.
Узнайте о ключевых понятиях и получите инструкции по контейнеризации приложений Windows в Службе приложений. Новые пользователи должны сначала ознакомиться с инструкцией для быстрого старта пользовательского контейнера и учебником.
Узнайте о ключевых понятиях и получите инструкции по контейнеризации приложений Linux в Службе приложений. Новые пользователи должны сначала ознакомиться с инструкцией для быстрого старта пользовательского контейнера и учебником. Для сайдкар контейнеров см. руководство по настройке сайдкар контейнера для пользовательского контейнера в службе приложений Azure.
Примечание.
Использование служебного принципала для аутентификации при вытягивании образа Windows-контейнера больше не поддерживается. Мы рекомендуем использовать управляемое удостоверение для контейнеров Windows и Linux.
Поддерживаемые родительские образы
Выберите правильный родительский образ (базовый образ) для платформы, которую вы хотите использовать для пользовательского образа Windows:
- Чтобы развернуть приложения .NET Framework, используйте родительский образ, основанный на выпуске Windows Server 2019 Core из канала длительного обслуживания.
- Чтобы развернуть приложения .NET Core, используйте родительский образ на основе выпуска Windows Server 2019 Nano Annual Channel.
Во время запуска приложения требуется некоторое время для скачивания родительского образа. Вы можете сократить время запуска с помощью одного из следующих родительских образов, которые уже кэшируются в Службе приложений Azure:
- mcr.microsoft.com/windows/servercore:ltsc2022
- mcr.microsoft.com/windows/servercore:ltsc2019
-
mcr.microsoft.com/dotnet/framework/aspnet:
4.8-windowsservercore-ltsc2022 -
mcr.microsoft.com/dotnet/framework/aspnet:
4.8-windowsservercore-ltsc2019 -
mcr.microsoft.com/dotnet/runtime:
6.0-nanoserver-ltsc2022 -
mcr.microsoft.com/dotnet/runtime:
6.0-nanoserver-1809 -
mcr.microsoft.com/dotnet/aspnet:
6.0-nanoserver-ltsc2022 -
mcr.microsoft.com/dotnet/aspnet:
6.0-nanoserver-1809
Изменение 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 с помощью управляемого удостоверения. На этих шагах используется системное управляемое удостоверение, но также можно использовать пользовательское управляемое удостоверение.
Включите для веб-приложения системное управляемое удостоверение с помощью команды
az webapp identity assign.az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsvЗамените <имя> приложения именем, которое вы использовали на предыдущем шаге. Выходные данные команды, отфильтрованные с аргументами
--queryи--output, представляют собой идентификатор учетной записи службы назначенной идентичности.Получите идентификатор ресурса реестра контейнеров:
az acr show --resource-group <group-name> --name <registry-name> --query id --output tsvЗамените <имя> реестра именем реестра. Выходные данные команды, отфильтрованные аргументами
--queryи--output, — это идентификатор ресурса реестра контейнеров.Предоставьте управляемой идентификации разрешение на доступ к реестру контейнеров.
az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"Измените следующие значения:
-
<идентификатор сервисного принципала> с сервисным идентификатором из
az webapp identity assignкоманды -
<registry-resource-id с идентификатором контейнерного реестра> из
az acr showкоманды
Дополнительные сведения об этих разрешениях см. в статье "Что такое управление доступом на основе ролей Azure"?
-
<идентификатор сервисного принципала> с сервисным идентификатором из
Настройте приложение для извлечения данных из Реестра контейнеров Azure с помощью управляемого удостоверения.
az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'Измените следующие значения:
- <имя> приложения с именем веб-приложения.
Подсказка
Если вы используете консоль PowerShell для выполнения команд, экранируйте строки в аргументе
--generic-configurationsна этом и следующем шагах. Например:--generic-configurations '{\"acrUseManagedIdentityCreds\": true'.(Необязательно) Если приложение использует управляемое удостоверение, назначаемое пользователем, убедитесь, что удостоверение настроено в веб-приложении, а затем задайте
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 с пользовательскими контейнерами, выполните следующие действия.
Создайте стандартный
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.
- Значение
Создайте скрипт точки входа с именем
entrypoint.shили измените существующий файл точки входа. Добавьте команду, чтобы запустить службу SSH, а также команду запуска приложения. В следующем примере показано, как запустить приложение Python. Замените последнюю команду в соответствии с языком проекта или стеком:#!/bin/sh set -e service ssh start exec gunicorn -w 4 -b 0.0.0.0:8000 app:appДобавьте следующие инструкции в 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контейнера доступен только в мостовой сети частной виртуальной сети. Злоумышленник в Интернете не может получить доступ к нему.Перестройте и отправьте образ 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
- Ограничения предварительной версии
- Параметры Docker Compose
Использование постоянного хранилища в 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.
Поддерживаемые параметры
commandentrypointenvironmentimageportsrestartservices-
volumes(Сопоставление с хранилищем Azure не поддерживается)
Неподдерживаемые параметры
-
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" указывает на то, что путь не существует, и он сигнализирует службе приложений о том, что контейнер работоспособен и готов реагировать на запросы.
Связанный контент
- Руководство. Перенос пользовательского программного обеспечения в Службу приложений Azure с помощью пользовательского контейнера
- Руководство по настройке бокового контейнера для пользовательского контейнера в службе приложений Azure
- Справка по переменным среды и параметрам приложений
- Загрузка сертификатов в контейнерах Windows/Linux