使用重启策略运行容器化任务

在 Azure 容器实例中部署容器的简便性和速度,使该服务成了可用于执行一次性任务(例如,在容器实例中生成、测试渲染作业并制作其映像)的引人注目的平台。

借助可配置的重启策略,可指定容器在完成进程后停止。 由于容器实例按秒计费,只需针对执行任务的容器在运行时所用的计算资源付费。

本文演示的示例使用 Azure CLI。 必须在本地安装 Azure CLI 2.0.21 或更高版本。

容器重启策略

在 Azure 容器实例中创建容器组时,可以指定三个重启策略设置中的一个。

重启策略 说明
Always 始终重启容器组中的容器。 如果在创建容器时未指定重启策略,则会应用此默认设置。
Never 永远不重启容器组中的容器。 容器最多运行一次。
OnFailure 仅当容器中执行的进程失败(它以非零退出代码终止)时,才重启容器组中的容器。 容器至少运行一次。

注意

如果容器组配置了 IP 地址,则在重启容器组时,该 IP 地址可能会更改。

指定重启策略

重启策略的指定方式取决于容器实例的创建方式,例如,是使用 Azure CLI、Azure PowerShell cmdlet 还是 Azure 门户。 在 Azure CLI 中,在调用 az container create 时指定 --restart-policy 参数。

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerimage \
    --restart-policy OnFailure

一直运行到完成的示例

若要查看重启策略的工作方式,请基于 Microsoft aci-wordcount 映像创建一个容器实例,并指定 OnFailure 重启策略。 此示例容器运行一个 Python 脚本,默认情况下,该脚本会分析莎士比亚著作哈姆雷特中的文本,将 10 个最常见的单词写入 STDOUT,然后退出。

使用以下 az container create 命令运行示例容器:

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Azure 容器实例将启动该容器,然后在其应用程序(在本例中为脚本)退出时停止。 当 Azure 容器实例停止重启策略为 NeverOnFailure 的某个容器时,该容器的状态将设置为 Terminated。 可以使用 az container show 命令检查容器的状态:

az container show \
    --resource-group myResourceGroup \
    --name mycontainer \
    --query containers[0].instanceView.currentState.state

示例输出:

"Terminated"

当示例容器的状态显示为 Terminated 后,可以通过查看容器日志来查看该容器的任务输出。 运行 az container logs 命令可查看脚本的输出:

az container logs --resource-group myResourceGroup --name mycontainer

输出:

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

此示例显示了由脚本发送到 STDOUT 的输出。 但是,容器化任务可能会将其输出写入到持久性存储供以后检索。 例如,写入到 Azure 文件共享

后续步骤

基于任务的方案(例如,使用多个容器批量处理大型数据集)可以在运行时利用自定义的环境变量命令行

有关如何保存一直运行到完成的容器的输出,请参阅装载包含 Azure 容器实例的 Azure 文件共享