You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline使用latest标签部署Docker镜像到AKS报错咨询

问题根因

你当前遇到的ImagePullBackOff错误核心原因是:流水线构建推送镜像时仅打了$(Build.BuildId)标签,没有推送latest标签到ACR,导致K8s部署时拉取不存在的镜像报错,附带的401错误是私有ACR对不存在镜像的匿名请求拦截,不是权限配置问题。

两种解决方案

方案1:构建时同时推送latest标签(最简单快速)

直接修改Azure Pipeline中Docker@2任务的tags配置,新增latest标签即可,修改后的Docker任务代码如下:

- task: Docker@2
  displayName: Build and push image
  inputs:
    command: buildAndPush
    repository: $(imageRepository)
    dockerfile: $(dockerfilePath)
    containerRegistry: $(dockerRegistryServiceConnection)
    buildContext: $(Build.Repository.LocalPath)
    tags: |
      $(tag)
      latest

注意:该方案每次构建都会覆盖ACR里的latest标签,无法追溯历史部署版本,适合测试环境使用,生产环境更推荐方案2。

方案2:参数化K8s部署文件(更稳妥,支持版本追溯)

不需要依赖latest标签,直接把每次构建的唯一标签传入K8s部署文件,避免版本混乱,操作步骤如下:

  1. 修改deploy_watchdog_kube.yaml的镜像配置,把固定的latest改成占位符:
# 修改前
image: acrfollis.azurecr.io/watchdogapp:latest
# 修改后
image: acrfollis.azurecr.io/watchdogapp:__IMAGE_TAG__
  1. 在流水线的Docker任务之后、K8s部署任务之前,新增sed命令替换占位符:
# 新增替换标签步骤
- bash: |
    sed -i "s/__IMAGE_TAG__/$(tag)/g" $(Build.SourcesDirectory)/Follis.WatchDog/deploy_watchdog_kube.yaml
  displayName: Replace image tag in k8s manifest
  1. 原有Kubernetes@1任务无需额外修改,apply时会自动使用本次构建的唯一标签触发滚动更新。
可选优化

如果使用方案2,可以把K8s任务的forceUpdate改为true,确保每次部署都会触发Pod重建,避免配置未变更时不更新的问题。


内容的提问来源于stack exchange,提问作者Vibin Kesavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:09:03