“等待连接时请求已取消”错误

本文介绍如何修复尝试从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 地址。 为此,请按照下列步骤进行操作:

  1. 在Azure 门户,搜索并选择网络观察程序

  2. “网络观察程序”菜单窗格中,选择“网络诊断工具>NSG 诊断”。

  3. 网络观察程序 |NSG 诊断页,按照下表中的说明完成表单。

    字段 操作
    目标资源类型 列表中选择虚拟机
    虚拟机 在列表中选择 Azure VM 的名称。
    协议 列表中选择 TCP
    方向 选择“ 出站 ”选项。
    源类型 列表中选择 IPv4 地址/CIDR
    IPv4 地址/CIDR 输入 Azure VM 的 IP 地址。
    目标 IP 地址 输入Azure 容器注册表的 IP 地址。
    目标端口 输入 443
  4. 选择“运行 NSG 诊断”按钮。

  5. “结果”框中,选中“流量状态”字段的值

流量状态”字段可以具有“允许”或“拒绝”的值“被拒绝”状态表示 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 反馈社区