針對登錄的網路問題進行疑難排解

本文可協助您排解在存取虛擬網路中或防火牆或 Proxy 伺服器後方的 Azure 容器登錄時可能遇到的問題。

徵兆

可能包含下列一或多項:

  • 無法推送或提取映像,且您收到錯誤 dial tcp: lookup myregistry.azurecr.io
  • 無法推送或提取映像,且您收到錯誤 Client.Timeout exceeded while awaiting headers
  • 無法推送或提取映像,且您收到 Azure CLI 錯誤 Could not connect to the registry login server
  • 無法從登錄中將映像提取至 Azure Kubernetes Service 或其他 Azure 服務
  • 無法存取 HTTPS Proxy 後方的登錄,且您收到錯誤 Error response from daemon: login attempt failed with status: 403 ForbiddenError 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 無法掃描登錄中的映像,或掃描結果不會出現在適用於雲端的 Microsoft Defender 中
  • 嘗試存取設定了私人端點的登錄時,會收到錯誤 host is not reachable

原因

  • 用戶端防火牆或 Proxy 禁止存取 - 解決方案
  • 登錄上的公用網路存取規則禁止存取 - 解決方案
  • 虛擬網路或私人端點設定禁止存取 - 解決方案
  • 您嘗試整合適用於雲端的 Microsoft Defender 或其他特定 Azure 服務與具有私人端點、服務端點或公用 IP 存取規則的登錄 - 解決方案

進一步診斷

執行 az acr check-health 命令以取得登錄環境健康情況的詳細資訊,並選擇性存取目標登錄。 例如,診斷特定網路連線或設定問題。

如需命令範例,請參閱檢查 Azure 容器登錄的健康情況。 如果報告了錯誤,請檢閱錯誤參考和下列各節,以取得建議的解決方案。

如果您在搭配使用 Azure Kubernetes Service 與整合式登錄時遇到問題,請執行 az aks check-acr 命令以驗證 AKS 叢集可連線到登錄。

注意

當登錄驗證或授權發生問題時,也可能會發生某些網路連線徵兆。 請參閱對登錄的登入問題進行疑難排解

可能的解決方案

設定用戶端防火牆存取

若要從用戶端防火牆或 Proxy 伺服器後方存取登錄,請設定存取登錄的公用 REST 和資料端點的防火牆規則。 如果已啟用專用資料端點,則需要存取下列項目的規則:

  • REST 端點:<registryname>.azurecr.io
  • 資料端點:<registry-name>.<region>.data.azurecr.io

對於異地複寫的登錄,請設定每個區域複本的資料端點存取權。

在 HTTPS Proxy 後方,請確定您的 Docker 用戶端和 Docker 精靈都已針對 Proxy 行為進行設定。 如果您變更了 Docker 精靈的 Proxy 設定,請務必重新啟動精靈。

ContainerRegistryLoginEvents 資料表中的登錄資源記錄可能有助於診斷遭到封鎖的連線嘗試。

相關連結:

設定登錄的公用存取

如果透過網際網路存取登錄,請確認登錄允許您的用戶端進行公用網路存取。 根據預設,Azure 容器登錄允許從所有網路存取公用登錄端點。 登錄可能會限制對選定網路或選定 IP 位址的存取。

如果為登錄設定了具有服務端點的虛擬網路,則停用公用網路存取也會停用透過服務端點的存取。 如果為登錄設定了具有 Private Link 的虛擬網路,則 IP 網路規則不適用於登錄的私人端點。

相關連結:

設定 VNet 存取

確認虛擬網路針對 Private Link 或服務端點設定了私人端點 (預覽)。 目前不支援 Azure Bastion 端點。

如果已設定私人端點,請確認 DNS 會將登錄的公用 FQDN (例如 myregistry.azurecr.io) 解析為登錄的私人 IP 位址。

  • 執行具有 --vnet 參數的 az acr check-health 命令,以確認私人端點在虛擬網路中的 DNS 路由。
  • 使用網路公用程式 (例如 dignslookup) 進行 DNS 查閱。
  • 確定已針對登錄 FQDN 和每個資料端點 FQDN 設定 DNS 記錄

檢閱用來限制從網路中的其他資源到登錄之流量的 NSG 規則和服務標籤。

如果已設定登錄的服務端點,請確認已在登錄中新增允許從該網路子網路進行存取的網路規則。 服務端點僅支援從網路中的虛擬機器和 AKS 叢集進行存取。

若要使用不同 Azure 訂用帳戶中的虛擬網路來限制登錄存取,請確實在該訂用帳戶中註冊 Microsoft.ContainerRegistry 資源提供者。 使用 Azure 入口網站、Azure CLI 或其他 Azure 工具為 Azure Container Registry 註冊資源提供者

如果已在網路中設定 Azure 防火牆或類似的解決方案,請確認來自其他資源 (例如 AKS 叢集) 的輸出流量能夠連線到登錄端點。

相關連結:

設定服務存取

目前,不允許從數項 Azure 服務存取具有網路限制的容器登錄:

  • 適用於雲端的 Microsoft Defender 無法在限制了對私人端點、選定子網路或 IP 位址之存取的登錄中執行映像弱點掃描
  • 某些 Azure 服務的資源無法存取具有網路限制的容器登錄,包括 Azure App Service 和 Azure 容器執行個體。

如果需要從這些 Azure 服務存取或整合您的容器登錄,請移除網路限制。 例如,請移除登錄的私人端點,或是移除或修改登錄的公用存取規則。

從 2021 年 1 月開始,您可以設定網路受限的登錄,以允許從選取的信任服務進行存取。

相關連結:

進階疑難排解

如果在登錄中啟用了資源記錄集合,請檢閱 ContainterRegistryLoginEvents 記錄。 此記錄會儲存驗證事件和狀態,包括傳入身分識別和 IP 位址。 查詢記錄中是否有登錄驗證失敗

相關連結:

下一步

如果此處無法解決您的問題,請參閱下列選項。