Azure Container Registry から Azure Web App にイメージをプルできない
この記事では、Azure コンテナー レジストリから Azure Web App にイメージをプルするときに発生する可能性のある最も一般的なエラーのトラブルシューティングに関するガイダンスを提供します。
症状と初期トラブルシューティング
container レジストリの正常性を確認して、トラブルシューティングを開始することをお勧めします。
コンテナー レジストリの正常性を確認するには、次のコマンドを実行します。
az acr check-health --name <myregistry> --ignore-errors --yes
問題が検出された場合、結果にはエラー コードと説明が含まれます。 これらのエラーと考えられる解決策の詳細については、 エラー の確認に関するリファレンスを参照してください。
Note
Helm 関連または Notary 関連のエラーが発生した場合、コンテナー レジストリまたは AKS が動作していない、または問題が発生しているわけではありません。 これは、Helm または Notary がインストールされていない、または Azure CLI が現在インストールされているバージョンの Helm または Notary と互換性がないなどの問題を示しているだけです。
次に、トラブルシューティングに不可欠なプル関連のエラー メッセージを特定します。
- Azure portal にサインインします。
- Web アプリで、 展開センター>Log を選択します。 コミットを選択してログの詳細を表示します。 また、Monitoring セクションで Log stream をオンにして、イメージ プル プロセスのログをリアルタイムで表示することもできます。
次のセクションは、Web アプリ ログに表示される最も一般的なエラーのトラブルシューティングに役立ちます。
エラー 1: 未承認
Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized
管理者ユーザー ベースの認証のソリューション
"未承認" エラーは、管理者の資格情報が正しくない場合に発生する可能性があります。 これには、Web アプリ環境変数で構成したログイン サーバー、ユーザー名、またはパスワードが含まれます。
この問題を解決するには、次の手順を実行します:
- Azure ポータルでレジストリ コンテナーに移動します。 [ Settings セクションで、 Access キーを選択します。 Login server、Username、および password の管理者ユーザー資格情報の設定を確認します。
- Web アプリに移動します。 Settings セクションで、Environment 変数を選択します。
- コンテナー レジストリ用に構成されている 3 つの変数 (ログイン サーバー、ユーザー名、パスワード) が、レジストリ コンテナー内の管理者ユーザー資格情報の設定と一致していることを確認します。
マネージド ID ベースの認証のソリューション
Azure Web App のマネージド ID ベースの認証を使用する場合、プル アクションを実行するには、 Microsoft.ContainerRegistry/registries/pull/read
アクセス許可をマネージド ID に割り当てる必要があります。
Microsoft.ContainerRegistry/registries/pull/read
アクセス許可を含む Azure 組み込みロールは次のとおりです。
- AcrPull
- AcrPush
- ReaderContributor
- Owner
詳細については、「Azure Container Registry のロールとアクセス許可」をご覧ください。
コンテナー レジストリからプル操作を開始すると、AcrPull ロールが Azure Web App マネージド ID に自動的に割り当てられます。 アクセス許可を手動で追加する必要はありません。 ただし、Azure ポリシーなどによってロールの割り当ての作成がブロックされていないことを確認する必要があります。 さらに、ロールの割り当てが削除されなかったことを確認します。
エラー 2: <tag でタグ付けされたマニフェスト> が見つかりません
DockerApiException : Docker API responded with status code=NotFound, response={"message":"manifest for <acr-name>.azurecr.io/<repository>:<tag> not found: manifest unknown: manifest tagged by \"<tag>\" is not found"}
解決策: タグが存在することを確認する
エラー メッセージは、プルしようとしているイメージに関連付けられているタグが見つからなかったことを示します。 タグが関連付けられているリポジトリとレジストリ内に存在することを確認します。
Azure CLI を使用して、関連付けられているリポジトリとレジストリ内のタグを検索するには、次のコマンドを実行します。
az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>
Azure portal を使用して、関連付けられているリポジトリとレジストリ内にあるタグを見つけるには、次の手順に従います。
レジストリ コンテナーに移動します。 Services で Repositories を選択し、関連付けられているリポジトリを開き、タグの一覧を確認します。
Note
az acr repository show-tags コマンド、または Azure portal からのリポジトリのチェックは、コンテナー レジストリ ネットワーク 規則で許可されている場合にのみ機能します。
エラー 3: IP を持つクライアントにアクセスが許可されていません
DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head \"https:// <acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": denied: client with IP '<web-app-outbound-ip>' is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}
解決策 1: コンテナー レジストリの組み込みファイアウォールでデバイスの IP アドレスが許可されていることを確認する
既定では、コンテナー レジストリはすべてのネットワークからのインターネット経由の接続を受け入れます。 コンテナー レジストリには、特定の IP アドレスまたは CIDR へのアクセスを制限したり、パブリック ネットワーク アクセスを完全に無効にしたりできるファイアウォールが組み込まれています。
この問題は、Web アプリの IP アドレスがコンテナー レジストリの組み込みファイアウォールによってブロックされている場合に発生する可能性があります。
この問題を解決するには、組み込みのファイアウォールで、イメージをプルする必要がある Web アプリの送信 IP アドレスが許可されていることを確認します。
Web アプリの送信 IP アドレスを検索するには、次の手順に従います。
- Azure ポータルで Web アプリに移動します。
- Overview ページで、送信 IP アドレスを見つけて、 [その他の表示] を選択送信 IP アドレスの完全な一覧を取得します。
Azure CLI を使用して Web アプリの送信 IP アドレスを検索するには、「Azure アプリ サービスで送信 IP アドレスを検索するを参照してください。
解決策 2: Web アプリの仮想ネットワーク統合を構成する
Web アプリの IP アドレスを手動で追加せずに、パブリック ネットワーク アクセスを完全に無効にするか、コンテナー レジストリで選択したネットワークのみを許可する必要がある場合は、代わりにイメージをプライベートにプルします。 イメージをプライベートにプルするには、プライベート エンドポイントを使用してコンテナー レジストリ 構成し Web アプリ 有効な仮想ネットワーク統合を行う必要があります。
次の手順に従って、Web アプリ側で仮想ネットワーク統合を構成できます。
Azure ポータルで Web アプリに移動し、Networking を選択します。
[ 送信トラフィックの構成で、 仮想ネットワーク統合を構成仮想ネットワーク統合 追加を選択し、サブスクリプション、仮想ネットワーク、サブネットを指定します。
仮想ネットワーク構成 ページで、Container イメージ pull オプションが選択されていることを確認します。
仮想ネットワーク経由でイメージをプルするには、Web アプリの Deployment Center で Pull image over VNet を有効にする必要があります。 さらに、コンテナー レジストリでパブリック アクセスが無効になっているか、特定のネットワークに設定されている場合は、次の例に示すように、"ACR タグの読み込みに失敗しました - 失敗しました" というメッセージが表示されることがあります。 このシナリオでは、このエラーが予想されます。 この場合、 Image および Tag のドロップダウン オプションは使用できません。 画像とタグを手動で入力する必要があります。
次のステップ
このトラブルシューティング ガイダンスで問題が解決しない場合は、次の点を考慮してください。
サブネットに関連付けられているネットワーク セキュリティ グループとルート テーブルを確認します。 ファイアウォールなどの仮想アプライアンスがサブネット間のトラフィックを制御する場合は、ファイアウォールとそのアクセス規則を確認します。
Kudu サービスを使用して、追加のトラブルシューティングを行います。 Kudu サービスに接続できます。 たとえば、Bash を使用して nslookup <acr-name>.azurecr.io
を実行して DNS 解決をテストしたり、 tcpping <acr-name>.azurecr.io
を使用して接続を確認したりします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。