設定容器執行個體中的命令列以覆寫預設命令列作業
當您建立容器執行個體時,可選擇性地指定命令來覆寫模擬至容器映像的預設命令列指示。 此行為類似於對 docker run
的命令列引數 --entrypoint
。
如同設定容器執行個體的環境變數,指定起始命令列對於需要以工作特定設定動態準備每個容器的批次作業很有用。
命令列指導方針
根據預設,命令列會在容器中指定「不使用殼層啟動的單一程序」。 例如,命令列可能會執行 Python 指令碼或可執行檔。 此程序可以指定其他參數或引數。
若要執行多個命令,請設定容器作業系統中支援的殼層環境,以開始您的命令列。 範例:
作業系統 預設殼層 Ubuntu /bin/bash
Alpine /bin/sh
Windows cmd
遵循殼層的慣例,結合多個命令並依序執行。
視容器設定而定,您可能需要設定命令列可執行檔或引數的完整路徑。
根據命令列指定是長時間執行的工作或執行一次的工作,為容器執行個體設定適當的重新開機原則。 例如,針對執行一次的工作,建議使用
Never
或OnFailure
的重新開機原則。如果您需要容器映像中預設進入點集合的資訊,請使用 docker image inspect 命令。
命令列語法
命令列語法會因為 Azure API 或用來建立執行個體的工具而有所不同。 如果您指定殼層環境,也請觀察殼層的命令語法慣例。
az container create 命令:使用
--command-line
參數傳遞字串。 範例:--command-line "python myscript.py arg1 arg2"
)。New-AzureRmContainerGroup Azure PowerShell Cmdlet:使用
-Command
參數傳遞字串。 範例:-Command "echo hello"
。Azure 入口網站:在容器設定的命令覆寫屬性中,提供以逗號分隔的字串清單,不含引號。 範例:
python, myscript.py, arg1, arg2
)。Resource Manager 範本或 YAML 檔案,或其中一個 Azure SDK:將命令列屬性指定為字串陣列。 範例:Resource Manager 範本中的 JSON 陣列
["python", "myscript.py", "arg1", "arg2"]
。如果您熟悉 Dockerfile 語法,此格式類似於 CMD 指令的 exec 格式。
範例
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"
同樣地,一旦容器是「已終止」,藉由顯示容器的記錄來檢視輸出:
az container logs --resource-group myResourceGroup --name mycontainer2
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]
下一步
針對工作型案例,例如使用數個容器的大型資料集批次處理,可受益於執行階段上的自訂環境變數。 如需執行工作型容器的詳細資訊,請參閱使用重新啟動原則執行容器化工作。