如何在推送新版本镜像至Azure Container Registries时自动更新Azure Container Instances?
实现Azure Container Instances自动部署新版本镜像的方法
下面是几种可行的方案,解决推送镜像到ACR后自动重启/部署ACI的问题:
1. 用ACR任务触发ACI重启
直接在ACR中创建任务,当指定镜像被推送到仓库时,自动执行重启ACI的命令。
- 创建ACR任务的命令示例:
az acr task create \ --registry 你的ACR名称 \ --name restart-aci-task \ --image 你的镜像名称:latest \ --trigger-push \ --cmd "az container restart --resource-group 你的资源组名称 --name 你的ACI名称" - 注意事项:需为ACR任务的服务主体授予对应资源组的Contributor权限,确保能执行重启操作。
2. 配置ACR Webhook触发ACI操作
在ACR中创建Webhook,镜像推送时触发自定义命令或API请求来更新ACI。
- 步骤:
- 先确保ACI的镜像拉取策略设置为
Always(创建时用--image-pull-policy Always,或在门户中修改),保证每次启动拉取最新镜像。 - 在ACR门户的“Webhook”页面创建新Webhook,触发条件选择“镜像推送”,目标URL或命令设置为:
- 用Azure CLI:
az container restart -g 你的资源组 -n 你的ACI名称 - 用REST API:
POST https://management.azure.com/subscriptions/你的订阅ID/resourceGroups/你的资源组/providers/Microsoft.ContainerInstance/containerGroups/你的ACI名称/restart?api-version=2023-05-01
- 用Azure CLI:
- 先确保ACI的镜像拉取策略设置为
3. 用Azure Logic Apps搭建自动化工作流
通过可视化配置实现镜像推送后的自动重启,无需编写复杂脚本。
- 步骤:
- 创建新的Logic App,选择触发器“当Azure容器注册表中推送镜像时”,配置你的ACR信息和触发条件(如指定仓库、标签)。
- 添加动作“重启容器组”,选择对应的Azure订阅、资源组和ACI名称。
- 保存并启用Logic App,之后镜像推送时会自动触发重启。
4. 在Azure DevOps Pipeline中加入部署步骤
如果用DevOps做CI/CD,在镜像推送至ACR的步骤后,添加重启ACI的任务。
- YAML Pipeline示例:
stages: - stage: Deploy displayName: 'Deploy to ACI' jobs: - job: RestartACI steps: - task: AzureCLI@2 displayName: 'Restart Container Instance' inputs: azureSubscription: '你的Azure服务连接名称' scriptType: bash inlineScript: | az container restart --resource-group 你的资源组名称 --name 你的ACI名称
额外注意点
- 如果使用版本化标签(如v1、v2),重启ACI不会更新镜像标签,需改为重新部署(用
az container create覆盖或ARM模板更新)。 - 所有执行操作的主体(ACR任务服务主体、Logic App身份、DevOps服务连接)都需要具备对应资源的操作权限,避免权限不足导致失败。
内容的提问来源于stack exchange,提问作者user9569469
相关产品推荐
相关产品推荐

