次の方法で共有


Azure Container Registry の認証に関する問題のトラブルシューティング

Azure Container Registry (ACR) はプライベート レジストリ サービスです。 プッシュやプルなどの操作 ( の pull 操作を除く) を実行するには、最初に ACR に対して認証する必要があります。

この記事は、ACR 認証の問題のトラブルシューティングに役立ち、コンテナー レジストリからイメージをプルするときに発生する最も一般的なエラーの解決策を提供します。

初期のトラブルシューティング

  1. 使用している 認証オプション を特定します。 いずれかを選択したら、認証の問題を再現してエラーを取得します。

  2. トラブルシューティングを開始するには、 Azure コンテナー レジストリの正常性を確認します。

    コンテナー レジストリの正常性を確認するには、次のコマンドを実行します。

    az acr check-health --name <acr-name> --ignore-errors --yes
    

    問題が検出された場合、コマンド出力にはエラー コードと説明が表示されます。 エラー コードと考えられる解決策の詳細については、 health check エラー リファレンスを参照してください。

    Note

    Helm または Notary に関連するエラーが発生した場合、コンテナー レジストリまたはデバイスに影響する問題があることを意味するものではありません。 Helm または Notary がインストールされていないこと、または Azure CLI が現在インストールされているバージョンの Helm または Notary と互換性ないことを示すだけです。

エラー 1: "DOCKER_COMMAND_ERROR Docker クライアントがインストールされ、実行されているかどうかを確認してください"

エラーの詳細の例を次に示します。

You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.
<date and time> An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.

解決策 1: Docker がインストールされていることを確認する

az acr login コマンドは、docker login コマンドを呼び出し、Microsoft Entra アクセス トークンを使用して ACR に対する認証を行います。 コマンドを実行するマシンに Docker クライアントと Docker デーモンをインストールする必要があります。 Docker をインストールするには、 Docker エンジンのインストールに関する記事を参照してください。

解決策 2: "--expose-token" パラメーターで "az acr login" コマンドを使用する

Docker デーモンが環境内で実行されない場合、ACR で認証する必要がある場合は、--expose-token パラメーター az acr login コマンドを使用します。 このコマンドは、Docker デーモンを必要とせず、Docker CLI のみを必要とするスクリプトを実行する必要がある場合に役立ちます (たとえば、Azure Cloud Shell を使用する場合)。

エラー 2: "このコマンドでは、Azure Cloud Shell でサポートされていない docker デーモンを実行する必要があります"

エラーの詳細の例を次に示します。

This command requires running the docker daemon, which is not supported in Azure Cloud Shell. You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.

解決策 1: 別の環境で "az acr login -n <acr-name>" コマンドを実行する

az acr login -n <acr-name> コマンドを実行するには、Docker クライアントと Docker デーモンが必要です。 Azure Cloud Shell では、Docker クライアントのみが提供されます。 このエラーを解決するには、Docker デーモンがインストールされている環境で az acr login -n <acr-name> コマンドを実行します。

解決策 2: "--expose-token" パラメーターで "az acr login" コマンドを使用する

az acr login -n <acr-name> コマンドを実行するには、Docker クライアントと Docker デーモンが必要です。 Azure Cloud Shell では、Docker クライアントのみが提供されます。 ただし、--expose-token パラメーターを指定した az acr login コマンドはAzure Cloud Shell などの Docker デーモンのない環境で機能します。

エラー 3: "Unauthorized: authentication required" (承認されていません: 認証が必要です)

エラーの詳細の例を次に示します。

Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": unauthorized: {"errors":[{"code":"UNAUTHORIZED","message":"authentication required, visit https://aka.ms/acr/authorization for more information."}]}

このエラーは、ACR にアクセスするときに認証に失敗したことを示します。 このエラーは、 az acr login または docker login コマンドを正しくないユーザー名またはパスワードで実行した場合、または有効期限が切れた資格情報 (サービス プリンシパル、スコープ マップを含むトークン、または管理者ユーザーを使用している場合) に発生する可能性があります。

解決策: 正しい/有効なユーザー名とパスワードを使用する

  • 管理者ユーザーを使用して認証する場合は、 Access キー ブレードで資格情報を確認し、 docker login または az acr login コマンドで使用した資格情報かどうかを確認します。

    ACR の [アクセス キー] ブレードを示すスクリーンショット。

    Note

    以前に使用されたパスワードが再生成されている可能性があります。

  • スコープ マップに関連付けられているトークンを使用している場合は、使用されている資格情報を確認します。 トークンのパスワードを生成したら、それを取得して資格情報を安全に保存する必要があります。これは、画面を閉じた後にパスワードが表示されなくなるためです。 次のスクリーンショットのメッセージを参照してください。

    [生成後に資格情報を安全に保存する] メッセージを示すスクリーンショット。

    使用したパスワードがわからない場合は、を繰り返し使用することを検討してください。

  • スコープ マップに関連付けられているトークンを使用している場合は、パスワードの有効期限を設定できます。 有効期限を表示するには、「 Show トークンの詳細」で説明されている Azure CLI コマンドを実行するか Azure portal でトークンを開き、次のスクリーンショットに従って 期限 を確認します。

    [有効期限] 列を示すスクリーンショット。

  • サービス プリンシパルを使用している場合は、ACR で認証するための特定のアクセス許可があることを確認します。 特定のアクセス許可と使用可能な組み込みロールについては、「 Azure Container Registry のロールとアクセス許可を参照してください。

  • サービス プリンシパルを使用している場合は、使用されている資格情報を確認します。 シークレットを生成したら、それを取得して資格情報を安全に保存する必要があります。これは、画面を閉じた後にパスワードが表示されなくなるためです。 次のスクリーンショットのメッセージを参照してください。

    [Save the secret when created before leaving the page]\(ページを離れる前にシークレットを保存する\) メッセージを示すスクリーンショット。

    使用したシークレット値がわからない場合は、新しいシークレット 作成することを検討してください

  • サービス プリンシパルを使用している場合は、シークレットの有効期限が切れていないことを確認します。

    az ad app credential list コマンドを実行して、シークレットの有効性を確認できます。

    az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
    

    または、Azure portal で Expires 列を確認することで、シークレットの有効性を確認できます。

    ACR の [有効期限] 列を示すスクリーンショット。

    シークレットの有効期限が切れている場合は、新しいシークレット 作成することを検討してください

エラー 4: "管理者ユーザーの資格情報を取得できません"

エラーの詳細の例を次に示します。

Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 401. Please try running 'az login' again to refresh permissions.
Unable to get admin user credentials with message: The resource with name '<acr-name>' and type 'Microsoft.ContainerRegistry/registries' could not be found in subscription '<subscription-name> (<subscription-id>)'.

解決策: 使用される ID に特定のアクセス許可があることを確認する

認証に使用される ID (ユーザーやマネージド ID など) に特定のアクセス許可があることを確認します。 特定のアクセス許可と使用可能な組み込みロールについては、「 Azure Container Registry のロールとアクセス許可を参照してください。

エラー 5: "IP <ip アドレスを持つクライアント> アクセスが許可されていません"

エラーの詳細の例を次に示します。

Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 403. Please try running 'az login' again to refresh permissions.
Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": denied: {"errors":[{"code":"DENIED","message":"client with IP \u0027<ip-address>\u0027 is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}]}

解決策: 認証しようとしているデバイスが ACR との接続を持っていることを確認する

ACR には、パブリック アクセスを制限するメカニズムであるファイアウォールが組み込まれています。 フル アクセスを許可したり、特定のネットワークへのアクセスのみを許可したり、パブリック アクセスを完全に無効にしたりすることができます。 ただし、認証を成功させるには適切な接続が必要です。 IP アドレスがレジストリへのアクセスとサインインを許可されていることを確認します。 パブリック アクセスの構成の詳細については、「 パブリック IP ネットワーク規則の構成を参照してください。

または、 Azure Private Link を使用して Azure コンテナー レジストリにプライベートに接続することを検討することもできます

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。