Condividi tramite


Impostare la riga di comando in un'istanza di contenitore per eseguire l'override dell'operazione della riga di comando predefinita

Quando si crea un'istanza di contenitore, specificare facoltativamente un comando per eseguire l'override dell'istruzione della riga di comando predefinita inserita nell'immagine del contenitore. Questo comportamento è simile all'argomento della riga di comando --entrypoint per docker run.

Analogamente all'impostazione delle variabili di ambiente per le istanze di contenitore, specificare una riga di comando iniziale è utile per i processi batch in cui è necessario preparare ogni contenitore in modo dinamico con una configurazione specifica dell'attività.

Indicazioni per la riga di comando

  • Per impostazione predefinita, la riga di comando specifica un singolo processo che viene avviato senza una shell nel contenitore. Ad esempio, la riga di comando potrebbe eseguire uno script Python o un file eseguibile. Il processo può specificare parametri o argomenti aggiuntivi.

  • Per eseguire più comandi, iniziare la riga di comando impostando un ambiente shell supportato nel sistema operativo del contenitore. Esempi:

    Sistema operativo Shell predefinita
    Ubuntu /bin/bash
    Alpine /bin/sh
    Finestre cmd

    Seguire le convenzioni della shell per combinare più comandi da eseguire in sequenza.

  • A seconda della configurazione del contenitore, potrebbe essere necessario impostare un percorso completo sull'eseguibile o sugli argomenti della riga di comando.

  • Impostare un criterio di riavvio appropriato per l'istanza di contenitore, a seconda che la riga di comando specifichi un'attività a esecuzione prolungata o un'attività a esecuzione singola. Ad esempio, un criterio di riavvio di tipo Never o OnFailure è consigliato per un'attività a esecuzione singola.

  • Se sono necessarie informazioni sul punto di ingresso predefinito impostato in un'immagine del contenitore, usare il comando docker image inspect.

Sintassi della riga di comando

La sintassi della riga di comando varia a seconda dell'API o dello strumento di Azure usato per creare le istanze. Se si specifica un ambiente shell, rispettare anche le convenzioni di sintassi dei comandi della shell.

  • Comando az container create: passare una stringa con il parametro --command-line. Esempio: --command-line "python myscript.py arg1 arg2").

  • Cmdlet New-AzContainerGroup di Azure PowerShell: passare una stringa con il -Command parametro . Esempio: -Command "echo hello".

  • Portale di Azure: nella proprietà Sostituzione comando della configurazione del contenitore specificare un elenco di stringhe delimitato da virgole, senza virgolette. Esempio: python, myscript.py, arg1, arg2).

  • Modello di Resource Manager o file YAML o uno degli SDK di Azure: specificare la proprietà della riga di comando come matrice di stringhe. Esempio: la matrice JSON ["python", "myscript.py", "arg1", "arg2"] in un modello di Resource Manager.

    Se si ha familiarità con la sintassi di Dockerfile, questo formato è simile al formato exec dell'istruzione CMD.

Esempi

Interfaccia della riga di comando di Azure Portale Modello
Comando singolo --command-line "python myscript.py arg1 arg2" Sostituzione comando: python, myscript.py, arg1, arg2 "command": ["python", "myscript.py", "arg1", "arg2"]
Più comandi --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" Sostituzione 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"]

Esempio di interfaccia della riga di comando di Azure

Ad esempio, modificare il comportamento dell'immagine del contenitore microsoft/aci-wordcount, che analizza il testo nell'Amleto di Shakespeare per trovare le parole più frequenti. Invece di analizzare l'Amleto, è possibile impostare una riga di comando che punta a un'origine di testo diversa.

Per visualizzare l'output del contenitore microsoft/aci-wordcount quando analizza il testo predefinito, eseguirlo con il comando az container create seguente. Non viene specificata alcuna riga di comando iniziale, quindi viene eseguito il comando del contenitore predefinito. A scopo illustrativo, in questo esempio vengono impostate variabili di ambiente per trovare le tre parole principali lunghe almeno cinque lettere:

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

Quando lo stato di entrambi i contenitori è Terminated (usare az container show per controllare lo stato), visualizzare il log con az container logs per verificare l'output.

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

Configurare ora un secondo contenitore di esempio per analizzare testo diverso specificando una riga di comando diversa. Lo script Python eseguito dal contenitore, wordcount.py, accetta un URL come argomento ed elabora il contenuto di questa pagina anziché il valore predefinito.

Ad esempio, per determinare le prime tre parole lunghe almeno cinque lettere in Romeo e Giulietta:

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"

Di nuovo, quando il contenitore mostra lo stato Terminato, visualizzare l'output tramite la visualizzazione dei log del contenitore:

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

Passaggi successivi

Gli scenari basati su attività, ad esempio l'elaborazione batch di un set di dati di grandi dimensioni con diversi contenitori, possono trarre vantaggio da righe di comando personalizzate in fase di esecuzione. Per altre informazioni sull'esecuzione di contenitori basati su attività, vedere Eseguire attività in contenitori in Istanze di Azure Container.