De opdrachtregel in een containerinstantie instellen om de standaardbewerking van de opdrachtregel te overschrijven

Wanneer u een containerinstantie maakt, kunt u desgewenst een opdracht opgeven om de standaardopdrachtregelinstructie in de containerinstallatiekopie te overschrijven. Dit gedrag is vergelijkbaar met het --entrypoint opdrachtregelargument voor docker run.

Net als het instellen van omgevingsvariabelen voor containerinstanties, is het opgeven van een beginopdrachtregel handig voor batchtaken waarbij u elke container dynamisch moet voorbereiden met een taakspecifieke configuratie.

Opdrachtregelrichtlijnen

  • Standaard geeft de opdrachtregel één proces op dat wordt gestart zonder een shell in de container. De opdrachtregel kan bijvoorbeeld een Python-script of uitvoerbaar bestand uitvoeren. Het proces kan aanvullende parameters of argumenten opgeven.

  • Als u meerdere opdrachten wilt uitvoeren, begint u de opdrachtregel door een shell-omgeving in te stellen die wordt ondersteund in het containerbesturingssysteem. Voorbeelden:

    Besturingssysteem Standaardshell
    Ubuntu /bin/bash
    Alpine /bin/sh
    Windows cmd

    Volg de conventies van de shell om meerdere opdrachten te combineren om opeenvolgend uit te voeren.

  • Afhankelijk van de containerconfiguratie moet u mogelijk een volledig pad instellen naar het uitvoerbare bestand of de argumenten van de opdrachtregel.

  • Stel een geschikt beleid voor opnieuw opstarten in voor het containerexemplaren, afhankelijk van of de opdrachtregel een langlopende taak of een taak eenmaal uitvoeren opgeeft. Een beleid voor opnieuw opstarten van Never of OnFailure wordt bijvoorbeeld aanbevolen voor een taak die eenmaal wordt uitgevoerd.

  • Als u informatie nodig hebt over de standaardinvoerpuntenset in een containerinstallatiekopieën, gebruikt u de opdracht docker-installatiekopieën inspecteren .

Opdrachtregelsyntaxis

De syntaxis van de opdrachtregel is afhankelijk van de Azure-API of het hulpprogramma dat wordt gebruikt om de exemplaren te maken. Als u een shell-omgeving opgeeft, moet u ook de syntaxisconventies van de shell in acht nemen.

  • opdracht az container create : geef een tekenreeks door met de --command-line parameter . Voorbeeld: --command-line "python myscript.py arg1 arg2").

  • New-AzureRmContainerGroup Azure PowerShell cmdlet: Geef een tekenreeks door met de -Command parameter . Bijvoorbeeld: -Command "echo hello".

  • Azure Portal: geef in de eigenschap Command override van de containerconfiguratie een door komma's gescheiden lijst met tekenreeksen op, zonder aanhalingstekens. Voorbeeld: python, myscript.py, arg1, arg2).

  • Resource Manager sjabloon of YAML-bestand of een van de Azure SDK's: geef de opdrachtregeleigenschap op als een matrix met tekenreeksen. Voorbeeld: de JSON-matrix ["python", "myscript.py", "arg1", "arg2"] in een Resource Manager-sjabloon.

    Als u bekend bent met de syntaxis van Dockerfile , is deze indeling vergelijkbaar met de exec-vorm van de CMD-instructie.

Voorbeelden

Azure CLI Portal Template
Eén opdracht --command-line "python myscript.py arg1 arg2" Opdracht overschrijven: python, myscript.py, arg1, arg2 "command": ["python", "myscript.py", "arg1", "arg2"]
Meerdere opdrachten --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" Opdracht overschrijven: /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-voorbeeld

Wijzig bijvoorbeeld het gedrag van de containerafbeelding microsoft/aci-wordcount , waarmee tekst in Hamlet van Shakespeare wordt geanalyseerd om de meest voorkomende woorden te vinden. In plaats van Hamlet te analyseren, kunt u een opdrachtregel instellen die naar een andere tekstbron verwijst.

Als u de uitvoer van de container microsoft/aci-wordcount wilt zien wanneer deze de standaardtekst analyseert, voert u deze uit met de volgende opdracht az container create . Er is geen start-opdrachtregel opgegeven, dus de standaardcontaineropdracht wordt uitgevoerd. Ter illustratie stelt dit voorbeeld omgevingsvariabelen in om de bovenste 3 woorden te vinden die ten minste vijf letters lang zijn:

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

Zodra de status van de container wordt weergegeven als Beëindigd (gebruik az container show om de status te controleren), geeft u het logboek weer met az container logs om de uitvoer te bekijken.

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

Stel nu een tweede voorbeeldcontainer in om verschillende tekst te analyseren door een andere opdrachtregel op te geven. Het Python-script dat wordt uitgevoerd door de container , wordcount.py, accepteert een URL als argument en verwerkt de inhoud van die pagina in plaats van de standaardwaarde.

Als u bijvoorbeeld de bovenste 3 woorden wilt bepalen die ten minste vijf letters lang zijn in Romeo en Julia:

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"

Zodra de container is beëindigd, bekijkt u de uitvoer door de logboeken van de container weer te geven:

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

Volgende stappen

Op taken gebaseerde scenario's, zoals batchverwerking van een grote gegevensset met meerdere containers, kunnen profiteren van aangepaste opdrachtregels tijdens runtime. Zie Containertaken uitvoeren met beleid voor opnieuw opstarten voor meer informatie over het uitvoeren van op taken gebaseerde containers.