Defina a linha de comandos numa instância de contentor para substituir a operação de linha de comandos predefinida

Quando cria uma instância de contentor, opcionalmente, especifique um comando para substituir a instrução predefinida da linha de comandos incorporada na imagem do contentor. Este comportamento é semelhante ao argumento da --entrypoint linha de comandos para docker run.

Tal como definir variáveis de ambiente para instâncias de contentor, especificar uma linha de comandos inicial é útil para tarefas de lote onde tem de preparar cada contentor dinamicamente com a configuração específica da tarefa.

Diretrizes da linha de comandos

  • Por predefinição, a linha de comandos especifica um único processo que é iniciado sem uma shell no contentor. Por exemplo, a linha de comandos pode executar um script python ou um ficheiro executável. O processo pode especificar parâmetros ou argumentos adicionais.

  • Para executar vários comandos, inicie a linha de comandos ao definir um ambiente de shell suportado no sistema operativo do contentor. Exemplos:

    Sistema operativo Shell predefinida
    Ubuntu /bin/bash
    Alpine /bin/sh
    Windows cmd

    Siga as convenções da shell para combinar vários comandos a executar em sequência.

  • Consoante a configuração do contentor, poderá ter de definir um caminho completo para os argumentos ou executáveis da linha de comandos.

  • Defina uma política de reinício adequada para a instância de contentor, consoante a linha de comandos especifique uma tarefa de execução prolongada ou uma tarefa run-once. Por exemplo, uma política de reinício de Never ou OnFailure é recomendada para uma tarefa run-once.

  • Se precisar de informações sobre o ponto de entrada predefinido definido numa imagem de contentor, utilize o comando de inspeção da imagem do docker .

Sintaxe da linha de comandos

A sintaxe da linha de comandos varia consoante a API do Azure ou a ferramenta utilizada para criar as instâncias. Se especificar um ambiente de shell, observe também as convenções de sintaxe do comando da shell.

  • comando az container create : transmita uma cadeia com o --command-line parâmetro . Exemplo: --command-line "python myscript.py arg1 arg2").

  • New-AzureRmContainerGroup Azure PowerShell cmdlet: transmita uma cadeia com o -Command parâmetro . Exemplo: -Command "echo hello".

  • portal do Azure: na propriedade Substituição do comando da configuração do contentor, forneça uma lista separada por vírgulas de cadeias, sem aspas. Exemplo: python, myscript.py, arg1, arg2).

  • Resource Manager modelo ou ficheiro YAML ou um dos SDKs do Azure: especifique a propriedade da linha de comandos como uma matriz de cadeias. Exemplo: a matriz ["python", "myscript.py", "arg1", "arg2"] JSON num modelo de Resource Manager.

    Se estiver familiarizado com a sintaxe do Dockerfile , este formato é semelhante à forma exec da instrução CMD.

Exemplos

CLI do Azure Portal Modelo
Comando único --command-line "python myscript.py arg1 arg2" Substituição do comando: python, myscript.py, arg1, arg2 "command": ["python", "myscript.py", "arg1", "arg2"]
Vários comandos --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" Substituição do comando: /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"]

Exemplo da CLI do Azure

Por exemplo, modifique o comportamento da imagem de contentor microsoft/aci-wordcount , que analisa texto no Hamlet de Shakespeare para encontrar as palavras que ocorrem mais frequentemente. Em vez de analisar Hamlet, pode definir uma linha de comandos que aponta para uma origem de texto diferente.

Para ver a saída do contentor microsoft/aci-wordcount quando analisar o texto predefinido, execute-o com o seguinte comando az container create . Não foi especificada nenhuma linha de comandos inicial, pelo que o comando de contentor predefinido é executado. Para efeitos de ilustração, este exemplo define as variáveis de ambiente para encontrar as três principais palavras com, pelo menos, cinco letras de comprimento:

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

Assim que o estado do contentor for apresentado como Terminado (utilize az container show para verificar o estado), apresente o registo com az container logs para ver a saída.

az container logs --resource-group myResourceGroup --name mycontainer1
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]

Agora, configure um segundo contentor de exemplo para analisar texto diferente ao especificar uma linha de comandos diferente. O script python executado pelo contentor, wordcount.py, aceita um URL como um argumento e processa o conteúdo dessa página em vez da predefinição.

Por exemplo, para determinar as três principais palavras com, pelo menos, cinco letras de comprimento em Romeu e Julieta:

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"

Novamente, quando o contentor for Terminado, veja o resultado ao mostrar os registos do contentor:

az container logs --resource-group myResourceGroup --name mycontainer2
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]

Passos seguintes

Os cenários baseados em tarefas, como o processamento em lotes de um grande conjunto de dados com vários contentores, podem beneficiar de linhas de comandos personalizadas no runtime. Para obter mais informações sobre a execução de contentores baseados em tarefas, veja Executar tarefas em contentores com políticas de reinício.