共用方式為


針對 Azure Container Registry 刪除作業問題進行疑難解答

Azure Container Registry (ACR) 是私人登錄服務,可用來建置、儲存和管理容器映像和相關成品。 若要維護登錄的健康情況並降低儲存成本,您可以視需要刪除映像、成品和存放庫。

本文可協助您針對刪除映像、成品或存放庫時發生的一些問題進行疑難解答。

問題 1:無法刪除空白存放庫

當您嘗試從容器登入中移除空白存放庫時,會產生類似下列訊息的錯誤訊息:

  • 使用 Azure 入口網站 時發生錯誤:

    {'code':'NAME_UNKNOWN','message':'repository name not known to registry','detail':{'name':'mailhog'}}

  • 使用 Azure CLI 時發生錯誤:

    2024-05-08 12:14:04.261355 錯誤:登錄不知道存放庫名稱。 相互關聯標識碼:aaaa0000-bb11-2222-33cc-44444dddd

之所以發生此錯誤,是因為一開始刪除影像時,會留下一些孤立的元數據。 若要避免此錯誤,請勿清空存放庫。 請改為刪除整個存放庫。 此程式更有效率,因為它會刪除存放庫中的所有映像,包括所有標籤、唯一層和指令清單。

在存放庫之前新增虛擬映像。

問題 2:無法刪除與私人端點相關聯的容器登錄

如果 Azure 容器登錄與私人端點相關聯,則刪除容器登錄會失敗。 您必須先移除與其相關聯的所有私人端點,才能將其刪除。 若要這樣做,請使用 Azure 入口網站 或 az acr private-endpoint-connection delete 命令。 如需詳細資訊,請參閱管理私人端點連線

問題 3:刪除作業無法清除已使用記憶體

當您在 ACR 工作中執行 acr purge 命令以刪除許多映像時,記憶體使用量不會減少。

在 ACR 中,每個映像都有其對應的唯一指令清單和指令清單摘要。 不過,不同的映像可能會共用相同的圖層。 如需範例,請參閱下列螢幕擷取畫面。

顯示容器映像儲存方式的螢幕快照。

為了節省 ACR 中的儲存空間,多個不同指令清單所參考的層次只會儲存一次。

根據上述螢幕快照,如果您刪除影像 B,則會清除指令清單和指令清單摘要。 在圖層層級,只會刪除第 4 層,而第 1 層和第 2 層會保留在 ACR 記憶體中,因為另一個指令清單仍會參考它們。 因此,記憶體縮減將會小於預期。

問題 4:刪除 ACR 存放庫時不允許作業發生錯誤

當您嘗試移除 ACR 存放庫時,會收到下列錯誤訊息:

The operation is disallowed on this registry, repository or image.

原因

發生此錯誤的原因是您的存放庫、指令清單或映像層上存在鎖定。 使用下列命令來檢查鎖定。

注意

在下列命令中,您必須取代 、--name--registry--repository 參數的值--image

  1. 檢查存放庫層級是否有任何鎖定。

    az acr repository show --name myregistry --repository myrepo
    
  2. 檢查存放函式庫指令清單摘要層級的鎖定:

    
    az acr manifest list-metadata -registry myregistry -name myrepo      
    
  3. 檢查存放庫映像標記層級的鎖定:

    az acr repository show --name myregistry --image imagename:tag
    

輸出範例:

{
  "changeableAttributes": {
    "deleteEnabled": false,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": false
  },
  "createdTime": "2024-08-20T15:22:51.0355721Z",
  "imageName": "myImage_0a1c809cc2eb596028fcf7a68e498e09",
  "lastUpdateTime": "2024-08-20T15:23:01.2739647Z",
  "manifestCount": 1,
  "registry": "myACR.azurecr.io",
  "tagCount": 2
}

writeEnabled如果屬性設定為 false,這表示存放庫或映像已鎖定,以防止刪除作業。

解決方案

若要解決此問題,請使用下列命令將 變更 writeEnabled 為 true:

  1. 移除存放庫層級的鎖定:

    az acr repository update --name myregistry --repository myrepo --write-enabled true
    
  2. 移除指令清單層級的鎖定:

    az acr repository update --name myregistry --image myrepo@sha256:123456abcdefg --write-enabled true
    
  3. 移除映射標籤層級的鎖定:

    az acr repository update --name myregistry --image hello-world:latest --write-enabled true
    

與我們連絡,以取得說明

如果您有疑問,可以詢問 Azure 社群支援。 您也可以向 Azure 意見反應社群提交產品意見反應。