Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce indicazioni per la risoluzione degli errori più comuni che possono verificarsi quando si estraggono immagini da un registro contenitori di Azure all'app Web di Azure.
Sintomi e risoluzione dei problemi iniziali
È consigliabile avviare la risoluzione dei problemi controllando l'integrità del registro contenitori.
Per controllare l'integrità del registro contenitori, eseguire il comando seguente:
az acr check-health --name <myregistry> --ignore-errors --yes
Se viene rilevato un problema, i risultati includono un codice di errore e una descrizione. Per altre informazioni su questi errori e sulle possibili soluzioni, vedere Informazioni di riferimento sull'errore di controllo integrità.
Note
Se si ricevono errori correlati a Helm o Notary, non significa che il Registro Container o il servizio Azure Kubernetes non funziona o presenta un problema. Indica solo i problemi, ad esempio Helm o Notary, o che l'interfaccia della riga di comando di Azure non è compatibile con la versione attualmente installata di Helm o Notary.
Identificare quindi il messaggio di errore correlato al pull essenziale per la risoluzione dei problemi:
- Accedi al portale di Azure.
- Nell'app Web selezionare Log del Centro>distribuzione. Selezionare il commit per visualizzare i dettagli del log. È anche possibile visualizzare i log per il processo pull delle immagini in tempo reale controllando Flusso di log nella sezione Monitoraggio .
Le sezioni seguenti consentono di risolvere gli errori più comuni visualizzati nei log dell'app Web.
Errore 1: Non autorizzato
Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized
Soluzione per l'autenticazione basata sull'utente amministratore
L'errore "non autorizzato" può essere causato da credenziali di amministratore non corrette. Sono inclusi il server di accesso, il nome utente o la password configurati nelle variabili di ambiente dell'app Web.
Per ovviare a questo problema, esegui la procedura seguente:
- Nel portale di Azure passare al contenitore del Registro di sistema. Nella sezione Impostazioni selezionare Chiavi di accesso. Controllare le impostazioni delle credenziali utente amministratore del server di accesso, del nome utente e della password.
- Passare all'app Web. Nella sezione Impostazioni selezionare Variabili di ambiente.
- Assicurarsi che le tre variabili configurate per il registro contenitori (server di accesso, nome utente, password) corrispondano alle impostazioni delle credenziali utente amministratore nel contenitore del Registro di sistema.
Soluzione per l'autenticazione gestita basata su identità
Quando si usa l'autenticazione gestita basata sull'identità gestita dell'app Web di Azure, l'autorizzazione Microsoft.ContainerRegistry/registries/pull/read
deve essere assegnata all'identità gestita per eseguire l'azione pull.
I ruoli predefiniti di Azure che contengono l'autorizzazione Microsoft.ContainerRegistry/registries/pull/read
sono i seguenti:
- AcrPull
- AcrPush
- ReaderContributor
- Proprietario
Per altre informazioni, vedere Ruoli e autorizzazioni di Registro Azure Container.
Quando si avvia un'operazione pull dal registro contenitori, il ruolo AcrPull viene assegnato automaticamente all'identità gestita dell'app Web di Azure. Non è necessario aggiungere manualmente le autorizzazioni. Tuttavia, è necessario assicurarsi che la creazione dell'assegnazione di ruolo non sia bloccata da, ad esempio, un criterio di Azure. Verificare inoltre che l'assegnazione di ruolo non sia stata eliminata.
Errore 2: Il manifesto contrassegnato dal <tag> non viene trovato
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"}
Soluzione: assicurarsi che il tag esista
Il messaggio di errore indica che il tag associato all'immagine che si sta tentando di eseguire il pull non è stato trovato. Assicurarsi che il tag esista all'interno del repository e del Registro di sistema associato.
Per usare l'interfaccia della riga di comando di Azure per trovare i tag all'interno del repository e del Registro di sistema associati, eseguire il comando seguente:
az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>
Per usare il portale di Azure per trovare i tag all'interno del repository e del Registro di sistema associati, seguire questa procedura:
Passare al contenitore del Registro di sistema. In Servizi selezionare Repository, aprire il repository associato e quindi controllare l'elenco dei tag.
Note
Il comando az acr repository show-tags o il controllo dei repository dal portale di Azure funziona solo se le regole di rete del registro contenitori lo consentono.
Errore 3: Il client con IP non è consentito l'accesso
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."}
Soluzione 1: Assicurarsi che il firewall predefinito del registro contenitori consenta l'indirizzo IP del dispositivo
Per impostazione predefinita, un registro contenitori accetta connessioni tramite Internet da tutte le reti. Il registro contenitori dispone di un firewall predefinito che può limitare l'accesso a indirizzi IP o CIDR specifici o disabilitare completamente l'accesso alla rete pubblica.
Questo problema può verificarsi se gli indirizzi IP dell'app Web sono bloccati dal firewall predefinito del registro contenitori.
Per risolvere questo problema, assicurarsi che il firewall predefinito consenta gli indirizzi IP in uscita dell'app Web che deve eseguire il pull dell'immagine.
Per trovare gli indirizzi IP in uscita dell'app Web, seguire questa procedura:
- Nella portale di Azure passare all'app Web.
- Nella pagina Panoramica individuare l'indirizzo IP in uscita e quindi selezionare Mostra altro per ottenere l'elenco completo degli indirizzi IP in uscita
Per usare l'interfaccia della riga di comando di Azure per trovare gli indirizzi IP in uscita dell'app Web, vedere Trovare gli indirizzi IP in uscita nel servizio app Azure.
Soluzione 2: Configurare l'integrazione della rete virtuale per l'app Web
Se è necessario disabilitare completamente l'accesso alla rete pubblica o consentire solo le reti selezionate nel registro contenitori senza aggiungere manualmente gli indirizzi IP dell'app Web, l'opzione alternativa consiste nel eseguire il pull dell'immagine privatamente. Per eseguire il pull privato delle immagini, è necessario configurare il registro contenitori usando un endpoint privato e abilitare l'integrazione della rete virtuale per l'app Web.
È possibile configurare l'integrazione della rete virtuale sul lato app Web seguendo questa procedura:
Nella portale di Azure passare all'app Web e quindi selezionare Rete.
In Configurazione del traffico in uscita configurare Rete virtuale integrazione, selezionare Aggiungi integrazione rete virtuale e quindi specificare la sottoscrizione, la rete virtuale e la subnet.
Nella pagina Configurazione rete virtuale verificare che sia selezionata l'opzione pull immagine contenitore.
Per eseguire il pull dell'immagine sulla rete virtuale, è necessario abilitare l'immagine pull sulla rete virtuale nel Centro distribuzione dell'app Web. Inoltre, se il registro contenitori ha l'accesso pubblico disabilitato o impostato su reti specifiche, è possibile che venga visualizzato il messaggio "Failed to load ACR Tags - failed", come illustrato nell'esempio seguente. Questo errore è previsto in questo scenario. In questo caso, le opzioni a discesa per Image e Tag non saranno disponibili. Dovrai immettere manualmente l'immagine e il tag.
Passaggi successivi
Se questo materiale sussidiario per la risoluzione dei problemi non risolve il problema, tenere presente quanto segue:
Controllare i gruppi di sicurezza di rete e le tabelle di route associate alle subnet. Se un'appliance virtuale, ad esempio un firewall, controlla il traffico tra subnet, esamina il firewall e le relative regole di accesso.
Usare il servizio Kudu per una risoluzione dei problemi aggiuntiva. È possibile connettersi al servizio Kudu. Ad esempio, usare Bash per testare la risoluzione DNS eseguendo nslookup <acr-name>.azurecr.io
o controllare la connettività usando tcpping <acr-name>.azurecr.io
.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.