次の方法で共有


Azure Container Registry の削除操作に関する問題のトラブルシューティング

Azure Container Registry (ACR) は、コンテナー イメージと関連成果物を構築、格納、管理するためのプライベート レジストリ サービスです。 レジストリの正常性を維持し、ストレージ コストを削減するために、必要に応じてイメージ、成果物、リポジトリを削除できます。

この記事は、イメージ、成果物、またはリポジトリを削除するときに発生するいくつかの問題のトラブルシューティングに役立ちます。

問題 1: 空のリポジトリを削除できない

コンテナー レジストリから空のリポジトリを削除しようとすると、次のメッセージのようなエラー メッセージが生成されます。

  • Azure portal を使用する場合のエラー:

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

  • Azure CLI を使用する場合のエラー:

    2024-05-08 12:14:04.261355 エラー: リポジトリ名がレジストリに認識されていません。 関連付け ID: aaaa0000-bb11-2222-33cc-444444ddddd

このエラーは、イメージが最初に削除されるときに、孤立したメタデータの一部が残っているために発生します。 このエラーを回避するには、リポジトリを空にしないでください。 代わりに、リポジトリ全体を削除します。 このプロセスは、リポジトリ内のすべてのイメージ (すべてのタグ、一意のレイヤー、マニフェストを含む) を削除するため、より効果的です。

リポジトリ全体の前にダミー イメージを追加します。

問題 2: プライベート エンドポイントに関連付けられているコンテナー レジストリを削除できない

Azure コンテナー レジストリがプライベート エンドポイントに関連付けられている場合、コンテナー レジストリの削除は失敗します。 削除する前に、関連付けられているすべてのプライベート エンドポイントを削除する必要があります。 これを行うには、Azure portal または az acr private-endpoint-connection delete コマンドを使用します。 詳細については、「プライベート エンドポイント接続を管理する」を参照してください。

問題 3: 削除操作で使用済みストレージがクリアされない

ACR タスクで acr purge コマンドを実行して多数のイメージを削除しても、ストレージの使用量は減少しません。

ACR では、各イメージには対応する一意のマニフェストとマニフェスト ダイジェストがあります。 ただし、異なる画像が同じレイヤーを共有している可能性があります。 例として次のスクリーンショットを参照してください。

コンテナー イメージの格納方法を示すスクリーンショット。

ACR のストレージ領域を節約するために、複数の異なるマニフェストによって参照されるレイヤーは 1 回だけ格納されます。

前のスクリーンショットに基づいて、イメージ B を削除すると、マニフェストとマニフェスト ダイジェストがクリーンアップされます。 レイヤー レベルではレイヤー 4 のみが削除され、レイヤー 1 とレイヤー 2 は ACR ストレージに残ります。これは、別のマニフェストで引き続き参照されるためです。 そのため、ストレージの削減は予想よりも少なくなります。

問題 4: ACR リポジトリの削除時に操作が許可されていないエラー

ACR リポジトリを削除しようとすると、次のエラー メッセージが表示されます。

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

原因

このエラーは、リポジトリ、マニフェスト、またはイメージ レイヤーにロックが存在するため発生します。 ロックを確認するには、次のコマンドを使用します。

Note

次のコマンドでは、 --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 フィードバック コミュニティに製品フィードバックを送信することもできます。