Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文可帮助你解决在虚拟网络中或防火墙或代理服务器后面访问Azure容器注册表时可能会遇到的问题。
症状
可能包括以下一项或多项:
- 无法推送或拉取映像,出现错误
dial tcp: lookup myregistry.azurecr.cn - 无法推送或拉取映像,出现错误
Client.Timeout exceeded while awaiting headers - 无法推送或拉取镜像,并且收到Azure CLI错误
Could not connect to the registry login server - 无法将映像从注册表拉取到Azure Kubernetes Service或其他Azure服务
- 无法访问 HTTPS 代理后面的注册表,出现错误
Error response from daemon: login attempt failed with status: 403 Forbidden或Error response from daemon: Get <registry>: proxyconnect tcp: EOF Login failed - 无法配置虚拟网络设置,出现错误
Failed to save firewall and virtual network settings for container registry - 无法在Azure门户中访问或查看注册表设置,或使用Azure CLI管理注册表
- 无法添加或修改虚拟网络设置或公共访问规则
- ACR 任务无法推送或拉取映像
- Microsoft Defender for Cloud无法扫描注册表中的映像,或者扫描结果不会显示在Microsoft Defender for Cloud
- 在尝试访问使用专用终结点配置的注册表时,你收到错误
host is not reachable。
原因
- 客户端防火墙或代理阻止访问 - 解决方案
- 注册表上的公用网络访问规则阻止访问 - 解决方案
- 虚拟网络或专用终结点配置阻止访问 - 解决方案
- 尝试将 Microsoft Defender for Cloud 或某些其他 Azure 服务集成到具有专用终结点、服务终结点或公共 IP 访问规则的注册表中 - 解决方案
进一步诊断
运行 az acr check-health 命令以获取有关注册表环境的运行状况的详细信息,并选择性地访问目标注册表。 例如,诊断某些网络连接或配置问题。
有关命令示例,请参阅 检查Azure容器注册表的运行状况。 如果报告了错误,请查看 错误参考 和以下部分以获取建议的解决方案。
如果在集成注册表中使用Azure Kubernetes Service时遇到问题,请运行 az aks check-acr 命令来验证 AKS 群集是否可以访问注册表。
注意
当注册表身份验证或授权存在问题时,也可能出现一些网络连接症状。 请参阅 注册表登录、身份验证和授权疑难解答。
可能的解决方案
配置客户端防火墙访问权限
若要从客户端防火墙或代理服务器后面访问注册表,请将防火墙规则配置为可访问注册表的公共 REST 和数据终结点。 如果启用了专用数据终结点,则需要用于访问以下终结点的规则:
- REST 终结点:
<registryname>.azurecr.cn - 数据终结点:
<registry-name>.<region>.data.azurecr.cn
对于异地复制的注册表,请为每个区域副本配置对数据终结点的访问权限。
在 HTTPS 代理后面,确保 Docker 客户端和 Docker 守护程序均已针对代理行为进行了配置。 如果更改了 Docker 守护程序的代理设置,必需重启该守护程序。
ContainerRegistryLoginEvents 表中的注册表资源日志可能有助于诊断尝试的连接被阻止的问题。
相关链接:
配置对注册表的公共访问权限
如果通过 Internet 访问注册表,请确认注册表允许从客户端通过公用网络进行的访问。 默认情况下,Azure容器注册表允许从所有网络访问公共注册表终结点。 注册表可以将访问限制为来自所选网络或所选 IP 地址。
如果为具有服务终结点的虚拟网络配置了注册表,禁用公用网络访问还会禁止通过服务终结点进行访问。 如果为具有Private Link的虚拟网络配置了注册表,则 IP 网络规则不适用于注册表的专用终结点。
相关链接:
配置 VNet 访问权限
确认虚拟网络已配置好专用终结点用于私有链接或服务终结点(预览版)。 目前不支持 Azure Bastion 终结点。
如果配置了专用终结点,请确认 DNS 能够将注册表的公共 FQDN(例如myregistry.azurecr.cn)解析为注册表的专用 IP 地址。
- 使用 参数运行
--vnet命令,以确认虚拟网络中到专用终结点的 DNS 路由。 - 使用网络实用工具(如
dig或nslookup)进行 DNS 查找。 - 确保为注册表 FQDN 和每个数据终结点 FQDN 配置 DNS 记录。
查看用于限制从网络中的其他资源发往注册表的流量的 NSG 规则和服务标记。
如果配置了注册表的服务终结点,请确认用于允许从该网络子网进行访问的网络规则已添加到注册表。 服务终结点仅支持从网络中的虚拟机和 AKS 群集进行访问。
如果要在不同的Azure订阅中使用虚拟网络限制注册表访问,请确保在该订阅中注册 Microsoft.ContainerRegistry 资源提供程序。
为 Azure Container Registry 使用 Azure 门户、Azure CLI 或其他 Azure 工具注册资源提供程序。
如果在网络中配置了Azure Firewall或类似的解决方案,请检查是否启用了来自其他资源(例如 AKS 群集)的出口流量以访问注册表终结点。
相关链接:
配置服务访问
目前,不允许从多个Azure服务访问具有网络限制的容器注册表:
- Microsoft Defender for Cloud 无法在访问被限制至专用终结点、特定子网或 IP 地址的注册表中执行 镜像漏洞扫描。
- 某些Azure服务的资源无法访问具有网络限制的容器注册表,包括Azure App Service和Azure Container Instances。
如果需要访问或集成这些Azure服务与容器注册表,请删除网络限制。 例如,删除注册表的专用终结点,或者删除或修改注册表的公共访问规则。
可以配置受网络限制的注册表,以允许从选择的受信任服务 进行访问 。
相关链接:
高级故障排除
如果在注册表中启用了收集资源日志,请查看 ContainterRegistryLoginEvents 日志。 此日志存储身份验证事件和状态,包括传入标识和 IP 地址。 查询日志以查找 注册表身份验证失败。
相关链接:
后续步骤
如果此处无法解决你的问题,请参阅以下选项。