レジストリ ログインのトラブルシューティング

Azure Container Registry にログインするときに発生する可能性のある問題のトラブルシューティングに役立ちます。

現象

次のうち 1 つ以上が含まれる場合があります。

  • docker loginaz acr login、またはその両方を使用してレジストリにログインすることができない
  • レジストリにログインできず、unauthorized: authentication required または unauthorized: Application not registered with AAD のエラーが発生する
  • レジストリにログインできず、Could not connect to the registry login server の Azure CLI エラーが発生する
  • イメージをプッシュまたはプルできず、unauthorized: authentication required の Docker エラーが発生する
  • az acr loginを使用してレジストリにアクセスできず、CONNECTIVITY_REFRESH_TOKEN_ERROR. Access to registry was denied. Response code: 403. Unable to get admin user credentials with message: Admin user is disabled. Unable to authenticate using AAD or admin login credentials.エラーが発生する
  • Azure Kubernetes Service、Azure DevOps、または別の Azure サービスからレジストリにアクセスできない
  • レジストリにアクセスできず、Error response from daemon: login attempt failed with status: 403 Forbidden エラーが発生する - 「レジストリに関するネットワークの問題のトラブルシューティング」を参照
  • Azure portal でレジストリ設定にアクセスまたは表示できないか、Azure CLI を使用してレジストリを管理できない

原因

  • Docker が環境で適切に構成されていない - 対処法
  • レジストリが存在しないか、名前が正しくない - 対処法
  • レジストリの資格情報が有効でない - 対処法
  • レジストリのパブリック アクセスが無効になっている。 レジストリのパブリック ネットワーク アクセス規則によってアクセスが妨げられている - 解決策
  • 資格情報がプッシュ、プル、または Azure Resource Manager 操作に対して承認されていない - 対処法
  • 資格情報の有効期限が切れている - 対処法

詳しい診断

az acr check-health コマンドを実行して、レジストリ環境の正常性に関する詳細情報を取得し、必要に応じてターゲット レジストリにアクセスします。 たとえば、Docker 構成エラーや Microsoft Entra ログインの問題を診断します。

コマンドの例については、「Azure コンテナー レジストリの正常性のチェック」を参照してください。 エラーが報告された場合は、推奨される対処法について、エラー リファレンスと次のセクションを確認してください。

ACR から AKS クラスターにイメージをプルできない場合は、AKS サポート ドキュメントの手順に従います。

Note

また、一部の認証または承認エラーは、レジストリへのアクセスを妨げるファイアウォールまたはネットワーク構成がある場合に発生する可能性があります。 「レジストリに関するネットワークの問題のトラブルシューティング」を参照してください。

対処法

Docker の構成を確認する

ほとんどの Azure Container Registry 認証フローで、イメージのプッシュやプルなどの操作のためにレジストリで認証できるように、ローカルの Docker がインストールされている必要があります。 ご使用の環境で Docker CLI クライアントとデーモン (Docker エンジン) が実行されていることを確認します。 Docker クライアント バージョン 18.03 以降が必要です。

関連リンク:

正しいレジストリ名を指定する

docker login を使用する場合は、myregistry.azurecr.io など、レジストリの完全なログイン サーバー名を指定します。 必ず小文字のみを使用してください。 例:

docker login myregistry.azurecr.io

az acr login を Microsoft Entra ID と共に使用する場合は、まず Azure CLI にサインインし、次にレジストリの Azure リソース名を指定します。 リソース名は、myregistry (ドメイン サフィックスはなし) のように、レジストリの作成時に指定された名前です。 例:

az acr login --name myregistry

関連リンク:

レジストリにアクセスするための資格情報を確認する

シナリオに使用する、レジストリ所有者から提供された資格情報が有効であることを確認します。 いくつかの問題が考えられます。

  • Active Directory サービス プリンシパルを使用している場合は、Active Directory テナントで確実に正しい資格情報を使用します。
    • ユーザー名 - サービス プリンシパルのアプリケーション ID (クライアント ID とも呼ばれます)
    • パスワード - サービス プリンシパルのパスワード (クライアント シークレットとも呼ばれます)
  • Azure Kubernetes Service や Azure DevOps などの Azure サービスを使用してレジストリにアクセスする場合は、サービスのレジストリ構成を確認します。
  • --expose-token オプションを指定して az acr login を実行し、Docker デーモンを使用せずにレジストリをログインできるようにする場合は、確実にユーザー名 00000000-0000-0000-0000-000000000000 で認証します。
  • レジストリが匿名プル アクセス用に構成されている場合、以前の Docker ログインから格納されている既存の Docker 資格情報により匿名アクセスを防ぐことができます。 レジストリに対して匿名のプル操作を実行する前に、 docker logout を実行してください。

関連リンク:

資格情報がレジストリへのアクセスが許可されていることを確認する

レジストリからイメージをプルする AcrPull Azure ロールや、イメージをプッシュする AcrPush ロールなど、資格情報に関連付けられているレジストリのアクセス許可を確認します。

Azure CLI を使用してポータルまたはレジストリ管理でレジストリにアクセスするには、Azure Resource Manager 操作を実行するために少なくとも Reader ロールまたは同等のアクセス許可が必要です。

ポータルを経由したレジストリへのアクセスを許可するようにアクセス許可が最近変更された場合は、ブラウザーでシークレットまたはプライベート セッションを試して、古いブラウザー キャッシュや Cookie を回避することが必要になる場合があります。

ロールの割り当てを追加または削除するには、自分またはレジストリ所有者がサブスクリプションで十分な権限を持っている必要があります。

関連リンク:

資格情報の有効期限が切れていないことを確認する

トークンと Active Directory 資格情報は、定義された期間が経過すると期限切れになり、レジストリにアクセスできなります。 アクセスを有効にするには、資格情報のリセットまたは再生成が必要になる可能性があります。

  • 個々の AD ID、マネージド ID、またはレジストリ ログイン用のサービス プリンシパルを使用する場合、AD トークンは 3 時間後に期限切れになります。 レジストリにもう一度ログインします。
  • 期限切れのクライアント シークレットを持つ AD サービス プリンシパルを使用する場合、サブスクリプション所有者またはアカウント管理者は、資格情報をリセットするか、新しいサービス プリンシパルを生成する必要があります。
  • リポジトリスコープのトークンを使用する場合は、レジストリ所有者がパスワードをリセットするか、新しいトークンを生成する必要がある可能性があります。

関連リンク:

高度なトラブルシューティング

レジストリでリソース ログの収集が有効になっている場合は、ContainerRegistryLoginEvents ログを確認します。 このログには、受信 ID や IP アドレスを含む、認証イベントと状態が格納されています。 ログでレジストリ認証エラーのクエリを実行します。

関連リンク:

次のステップ

ここで問題を解決できない場合は、次のオプションを参照してください。