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

如何通过编程方式将Docker容器推送至Azure Container Registry

Azure ACR 容器镜像.NET程序推送实现方案

Azure官方没有单独封装容器镜像推送的专用.NET API,因为ACR完全兼容Docker/OCI标准镜像仓库协议,推送动作可通过通用容器操作能力配合Azure身份认证实现,主流实现分两类:

方案1:运行环境已部署Docker daemon(实现成本最低)

你不需要处理镜像分层计算、哈希校验等底层逻辑,只需要四步完成:

  • 用Azure.Identity NuGet包获取对应ACR的登录凭证:如果开了ACR管理员账户,可直接调用Azure资源管理接口拉取管理员用户名和密码;也可以用服务主体/托管身份直接生成ACR临时登录令牌,有效期最长3小时,安全性更高。
  • 完成Docker客户端的ACR身份认证:可以直接调用本地docker login <acr名称>.azurecr.io -u <用户名> -p <密码/令牌>命令,也可以用Docker.DotNet NuGet包调用Docker API的AuthAsync方法完成登录,避免启动子进程。
  • 给本地待推送镜像打ACR专属标签:标签格式要求为<acr名称>.azurecr.io/<自定义仓库名>:<版本号>,可通过docker tag命令或Docker.DotNet的Images.TagImageAsync方法实现。
  • 执行推送:调用Docker.DotNet的Images.PushImageAsync方法,或者直接运行docker push <打标后的完整镜像名>即可完成推送。

方案2:无Docker daemon的轻量化运行环境

如果程序运行环境没有部署Docker服务,不想依赖外部进程,可以用原生.NET库直接操作镜像完成推送:

  • 引入Azure.Containers.ContainerRegistry NuGet包,初始化ContainerRegistryClient时传入ACR访问域名和DefaultAzureCredential,自动完成Azure身份认证,不需要手动处理登录令牌。
  • 如果镜像已经导出为tar包,可直接读取镜像分层数据,依次上传分层blob、镜像manifest到对应ACR仓库即可,整个过程不需要调用Docker服务,资源消耗更低。

注意事项:

  1. 执行推送的身份(用户、服务主体、托管身份)必须被分配对应ACR的AcrPush角色权限,否则会返回403权限错误。
  2. 镜像标签命名需符合ACR规则,不能包含大写字母、特殊符号,默认不允许重复推送相同标签的镜像,需要覆盖可在ACR配置中开启可重复写入。

内容的提问来源于stack exchange,提问作者Mason Wheeler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:15:03