迁移微软容器镜像注册表地址:从mcr.microsoft.com迁移到mcr.azure.cn
Intro
最近在本地构建 docker 镜像的时候发现速度非常慢,在想是不是前段时间 dotnet CDN 切换有关,于是去微软容器注册表网站上看了一眼发现,针对中国用户推出了一个中国区域的 CDN 地址,换了中国区的容器镜像地址之后,构建速度非常快,推荐大家有需要的做一个迁移升级
前言
为了进一步提升中国用户/开发者在拉取微软官方容器与 OCI 构件时的稳定性、速度与合规性,Microsoft Artifact Registry(MAR,亦称 Microsoft Container Registry/MCR)现已在中国区域提供官方注册表端点:mcr.azure.cn与数据交付端点:*.data.mcr.azure.cn,原来的镜像地址在中国大陆会有严重的性能降级问题,推荐大家进行更新成新的中国区域的镜像地址。
为什么要切换到mcr.azure.cn?
• 更低时延与更高稳定性:在中国区域,
mcr.azure.cn(注册表发现/REST 端点)与*.data.mcr.azure.cn(数据交付/CDN 端点)由 Azure 在本地网络环境优化与加速,减少跨境访问带来的抖动与不确定性。• 可靠的数据交付:数据端点由 Azure Front Door 的区域 CDN POP 承载,提供多节点与更好的容灾能力;注册表端点通过 Azure Traffic Manager 覆盖全球,自动选择最优路径。
• 合规与可管理性:面向中国区域的官方域名与线路,更便于企业在本地网络与合规框架下进行统一配置与审计。
• 官方支持与供应链安全:MAR 不提供官方镜像站(mirrors),请勿使用第三方镜像以免引入内容被篡改、来源不明等供应链风险;使用官方端点可获得微软支持与最佳实践保障。
中国区域 CDN 分布如下:
关键点:在中国区域场景,
mcr.azure.cn与*.data.mcr.azure.cn是mcr.microsoft.com与*.data.mcr.microsoft.com的对应官方端点。迁移的核心仅是域名主机名的切换,镜像路径(仓库与标签)保持不变。
需要更改什么?
1. 将所有镜像引用的主机名从
mcr.microsoft.com替换为mcr.azure.cn(路径与标签不变)。2. 在企业防火墙/代理白名单中放行(如果需要):
•
mcr.azure.cn•
*.data.mcr.azure.cn
3. 更新 CI/CD、基础设施与脚本中的拉取命令与配置:
• Docker/Podman/nerdctl/ORAS 命令行
• Kubernetes 清单(
image:字段)• Helm
values.yaml的image.repository• 容器运行时配置(containerd/CRI-O)的 registry 端点与镜像加速
• 构建流水线(GitHub Actions/Azure DevOps/Jenkins/Gitlab/BitbucketPipeline 等)
4. 内部文档的同步更新。
快速迁移清单(Call for Action)
• 立刻在代码库中搜索旧端点并替换:
• 文本搜索:
mcr.microsoft.com• 批量替换:将其替换为
mcr.azure.cn
• 在预生产环境验证拉取、构建与部署流程(含回滚预案)。
• 网络侧放行并观察访问质量与带宽(
mcr.azure.cn与*.data.mcr.azure.cn)。• 通知相关团队(平台/DevOps/安全/网络)并更新内部知识库与新手指南。
• 停止使用非官方镜像站,统一改用官方中国区端点。
典型场景 Before/After
Docker 拉取镜像
# Before docker pull mcr.microsoft.com/dotnet/runtime:10.0 # After docker pull mcr.azure.cn/dotnet/runtime:10.0Dockerfile
# FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base FROM mcr.azure.cn/dotnet/aspnet:10.0 AS base # FROM mcr.microsoft.com/dotnet/sdk:10.0 AS publish FROM mcr.azure.cn/dotnet/sdk:10.0 AS publishKubernetes 部署清单(Deployment/StatefulSet)
# Before spec: template: spec: containers: - name: web image: mcr.microsoft.com/dotnet/aspnet:10.0# After spec: template: spec: containers: - name: web image: mcr.azure.cn/dotnet/aspnet:10.0验证与回归检查
• 连接性测试:
•
docker pull mcr.azure.cn/<repo>:<tag>是否稳定成功• 在不同时间/网络条件下重复测试以覆盖峰谷
• 性能与可靠性:
• 比较迁移前后拉取时延与带宽(
time docker pull、指标/日志)
• 兼容性:
• 业务镜像路径与标签不变,仅主机名更改;如使用摘要(digest),仍保持可拉取
• 网络与安全:
• 企业防火墙/代理是否已放行
mcr.azure.cn与*.data.mcr.azure.cn• 监控/告警是否已调整,避免旧域名导致误报
常见问题(FAQ)
• 是否需要更改镜像“路径”(仓库/标签)?
• 不需要。仅将主机名从
mcr.microsoft.com替换为mcr.azure.cn,其余保持不变。
• 数据端点
*.data.mcr.azure.cn要手动配置吗?• 不需要在命令中显式使用。客户端会通过注册表端点协商数据 URL;但企业网络需放行该通配域名以保证数据能顺利下载。
• 是否需要登录认证?
• MAR 作为官方分发注册表,绝大多数公共内容无需认证即可拉取;如有少数场景额外要求,请参考具体镜像文档与企业安全策略。
• 海外环境是否需要迁移?
• 海外场景可继续使用
mcr.microsoft.com;中国境内推荐使用mcr.azure.cn以获得本地网络优化与更好体验。
• 是否可以使用第三方镜像站?
• 不推荐。MAR 不提供官方镜像站,第三方镜像存在内容完整性与供应链风险;请使用官方端点并参考微软支持与安全最佳实践。
结语:立即行动,保障供应链与交付效率
• 现在就搜索并替换代码库、流水线与配置中的
mcr.microsoft.com→mcr.azure.cn。• 放行并验证
mcr.azure.cn与*.data.mcr.azure.cn的网络访问。• 在预生产全面验证后尽快上线,确保生产交付的稳定性与合规性。
• 停止使用非官方镜像来源,统一走微软官方中国区端点义获得最佳支持与安全保障。
如遇问题,请联系微软支持或在 GitHub 仓库提交 Issue:
• Microsoft 支持:创建支持请求[1]
• 反馈渠道:microsoft/containerregistry Issues[2]
References
• MAR 端点使用指南[3]
• MAR 防火墙规则[4]
• Azure CDN 中国 POP 覆盖[5]
• Azure CDN 全球 POP 覆盖[6]
引用链接
[1]创建支持请求:https://azure.microsoft.com/support/create-ticket/[2]microsoft/containerregistry Issues:https://github.com/microsoft/containerregistry/issues[3]MAR 端点使用指南:https://github.com/microsoft/containerregistry/blob/ba7c2c0b33ae4868ea4a766624fccc07a7a98faf/docs/mcr-endpoints-guidance.md[4]MAR 防火墙规则:https://github.com/microsoft/containerregistry/blob/ba7c2c0b33ae4868ea4a766624fccc07a7a98faf/docs/client-firewall-rules.md[5]Azure CDN 中国 POP 覆盖:https://docs.azure.cn/cdn/cdn-pops[6]Azure CDN 全球 POP 覆盖:https://docs.microsoft.com/azure/cdn/cdn-pop-locations