Установка командной строки в экземпляре контейнера для переопределения заданной по умолчанию операции командной строки
При необходимости во время создания экземпляра контейнера можно указать команду для переопределения инструкции командной строки по умолчанию, встроенной в образ контейнера. Это поведение аналогично поведению аргумента командной строки --entrypoint
в команде docker run
.
Как и при настройке переменных среды для экземпляров контейнеров, указание начальной командной строки полезно для пакетных заданий, в которых необходимо динамически подготовить каждый контейнер с помощью конфигурации конкретной задачи.
Рекомендации по использованию командной строки
По умолчанию командная строка указывает один процесс, который запускается без оболочки в контейнере. Например, командная строка может выполнять скрипт Python или исполняемый файл. В процессе можно указать дополнительные параметры или аргументы.
Чтобы выполнить несколько команд, запустите командную строку, задав окружение оболочки, поддерживаемое в операционной системе контейнера. Примеры:
Операционная система Оболочка по умолчанию Ubuntu /bin/bash
Алпайн /bin/sh
Windows cmd
Следуйте соглашениям оболочки, чтобы объединить несколько команд для последовательного выполнения.
В зависимости от конфигурации контейнера может потребоваться задать полный путь к исполняемому файлу или аргументам командной строки.
Задайте соответствующую политику перезапуска для экземпляра контейнера в зависимости от того, указывает ли командная строка продолжительную или однократную задачу. Например, политику перезапуска
Never
OnFailure
рекомендуется использовать для однократной задачи.Если вам нужны сведения о точке входа по умолчанию, заданной в образе контейнера, используйте команду проверки образа docker.
Синтаксис командной строки
Синтаксис командной строки зависит от API-интерфейса или средства Azure, используемого для создания экземпляров. Если вы указали окружение оболочки, также следите за ее соглашениями синтаксиса команд.
Команда az container create: передача строки с параметром
--command-line
. Например,--command-line "python myscript.py arg1 arg2"
.Командлет New-AzContainerGroup Azure PowerShell: передайте строку с параметром
-Command
. Пример:-Command "echo hello"
.Портал Azure: укажите разделенный запятыми список строк без кавычек в свойстве Переопределение команд в конфигурации контейнера. Например,
python, myscript.py, arg1, arg2
.Шаблон Resource Manager, файл YAML или один из пакетов SDK Azure: укажите свойство командной строки в виде массива строк. Пример: массив JSON
["python", "myscript.py", "arg1", "arg2"]
в шаблоне Resource Manager.Если вы знакомы с синтаксисом Dockerfile, этот формат аналогичен форме exec инструкции CMD.
Примеры
Azure CLI | Портал | Шаблон | |
---|---|---|---|
Одна команда | --command-line "python myscript.py arg1 arg2" |
Переопределение команды: python, myscript.py, arg1, arg2 |
"command": ["python", "myscript.py", "arg1", "arg2"] |
Несколько команд | --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" |
Переопределение команды: /bin/bash, -c, mkdir test; touch test/myfile; tail -f /dev/null |
"command": ["/bin/bash", "-c", "mkdir test; touch test/myfile; tail -f /dev/null"] |
Пример для Azure CLI
Например, измените поведение образа контейнера microsoft/aci-wordcount, который анализирует текст в Гамлете Шекспира, чтобы найти наиболее часто встречающиеся слова. Вместо анализа трагедии Гамлет можно задать командную строку, которая указывает на другой источник текста.
Чтобы просмотреть выходные данные контейнера microsoft/aci-wordcount при анализе текста по умолчанию, запустите его с помощью следующей команды az container create . Не указана командная строка запуска, поэтому выполняется команда контейнера по умолчанию. Для иллюстрации в этом примере задаются переменные среды, чтобы найти первые три слова, длиной по крайней мере пять букв:
az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--environment-variables NumWords=3 MinLength=5 \
--restart-policy OnFailure
Как только состояние контейнера станет Завершен (используйте az container show для проверки состояния), откройте журнал с помощью команды az container logs, чтобы просмотреть выходные данные.
az container logs --resource-group myResourceGroup --name mycontainer1
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]
Теперь настройте второй пример контейнера для анализа другого текста, указав другую командную строку. Скрипт Python wordcount.py, который выполняется в этом контейнере, принимает в качестве аргумента URL-адрес и обрабатывает содержимое страницы вместо содержимого по умолчанию.
Например, чтобы определить первые три слова, которые по крайней мере пять букв длиной в Ромео и Джульетте:
az container create \
--resource-group myResourceGroup \
--name mycontainer2 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure \
--environment-variables NumWords=3 MinLength=5 \
--command-line "python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html"
Как и прежде, вы сможете просмотреть выходные данные с помощью журналов контейнера, когда его состояние изменится на Terminated (Завершено), как показано ниже.
az container logs --resource-group myResourceGroup --name mycontainer2
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]
Следующие шаги
В сценариях на основе задач, таких как пакетная обработка большого набора данных с несколькими контейнерами, могут использоваться пользовательские командные строки во время выполнения. Дополнительные сведения о выполнении контейнеров на основе задач см. в статье Выполнение контейнерных задач с помощью политик перезапуска.