本文介绍如何修复尝试从Azure 容器注册表拉取容器映像或项目时发生的超时方案。
先决条件
现象
看到以下错误消息:
获取“https://< container-registry-name.azurecr.io/v2/>”:net/http: 请求在等待连接时已取消(在等待标头时超出 Client.Timeout)
原因 1:登录服务器上端口 443 不可用
身份验证和注册表管理操作通过注册表的公共登录服务器进行处理,但通过端口 443 的通信无法正常工作。
注意
Azure 容器注册表登录服务器也称为注册表 REST API 终结点。 此登录服务器具有域名格式。<container-registry-name>.azurecr.io
若要在端口 443 上手动测试设备与Azure 容器注册表登录服务器之间的连接,请运行 telnet 或 NetCat 命令:
telnet <container-registry-name>.azurecr.io 443
nc -vz <container-registry-name>.azurecr.io 443
解决方案 1:使端口 443 可用于设备与登录服务器之间的通信
确保设备与通过端口 443 Azure 容器注册表登录服务器之间的网络连接。
如果设备是受限网络体系结构的一部分,请确保设备通过端口 443 与Azure 容器注册表登录服务器建立网络连接。 可以考虑检查潜在的现有防火墙、代理服务器、访问控制列表、Internet 服务提供商(ISP)限制等。
原因 2:与 VM 的网络适配器或子网关联的 NSG 阻止通信
如果使用 Azure 虚拟机(VM)从Azure 容器注册表拉取,网络安全组(NSG)可能会阻止设备和登录服务器之间的通信。 阻止 NSG 与 Azure VM 的网络适配器或子网相关联。
运行原因 1 中显示的 telnet 或 NetCat 命令。 如果命令输出显示发生超时,请检查 NSG 配置是否阻止存储帐户的 IP 地址。 为此,请按照下列步骤进行操作:
在“网络观察程序”菜单窗格中,选择“网络诊断工具>NSG 诊断”。
在网络观察程序 |NSG 诊断页,按照下表中的说明完成表单。
字段 操作 目标资源类型 在 列表中选择虚拟机 。 虚拟机 在列表中选择 Azure VM 的名称。 协议 在 列表中选择 TCP 。 方向 选择“ 出站 ”选项。 源类型 在 列表中选择 IPv4 地址/CIDR 。 IPv4 地址/CIDR 输入 Azure VM 的 IP 地址。 目标 IP 地址 输入Azure 容器注册表的 IP 地址。 目标端口 输入 443。 选择“运行 NSG 诊断”按钮。
在“结果”框中,选中“流量状态”字段的值。
“流量状态”字段可以具有“允许”或“拒绝”的值。 “被拒绝”状态表示 NSG 正在阻止 Azure VM 与Azure 容器注册表之间的流量。 在这种情况下,阻止 NSG 的名称也会显示在 “结果 ”框中。 在结果表中,找到相应应用操作列值为 Deny 的行的 NSG 名称列。
解决方案 2:修改 NSG 配置以允许 VM 与Azure 容器注册表之间的连接
在 NSG 级别进行更改,以便允许在 Azure VM 与端口 443 上的Azure 容器注册表之间建立连接。 具体而言,请确保满足以下条件。
条件 | 详细信息 |
---|---|
路由表不会将流量丢弃到Azure 容器注册表登录服务器。 如果下一跃点设置为“无”,则会删除与Azure 容器注册表登录服务器关联的路由的流量。 | 虚拟网络流量路由 |
如果路由表将流量发送到虚拟设备(例如与 Azure VM 子网关联的防火墙),请确保防火墙不会阻止到端口 443 上的Azure 容器注册表登录服务器的流量。 | 配置规则以访问防火墙后的 Azure 容器注册表 |
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。