Domande frequenti - Registro Azure Container

Questo articolo include le risposte alle domande frequenti e i problemi noti relativi a Registro Azure Container.

Per indicazioni sulla risoluzione dei problemi dei registri, vedere:

Gestione delle risorse

È possibile creare un registro contenitori di Azure usando un modello di Resource Manager?

Sì. È possibile usare questo modello per creare un registro.

È disponibile l'analisi delle vulnerabilità di sicurezza per le immagini in Registro Azure Container?

Sì. Vedere la documentazione di Microsoft Defender per il cloud, Twistlock e Aqua.

Come si configura Kubernetes con Registro Azure Container?

Vedere la documentazione per Kubernetes e i passaggi per il servizio Azure Kubernetes.

Come si ottengono le credenziali di amministratore per un registro contenitori?

Importante

L'account utente amministratore è pensato per consentire l'accesso al registro a un singolo utente, principalmente a scopo di test. Non è consigliabile condividere le credenziali dell'account amministratore con più utenti. Negli scenari di tipo headless è consigliabile che gli utenti e le entità servizio abbiano una propria identità. Vedere la Panoramica dell'autenticazione.

Prima di ottenere le credenziali di amministratore, assicurarsi che l'utente amministratore del registro sia abilitato.

Per ottenere le credenziali tramite l'interfaccia della riga di comando di Azure:

az acr credential show -n myRegistry

Usando Azure PowerShell:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Come si ottengono le credenziali di amministratore in un modello di Resource Manager?

Importante

L'account utente amministratore è pensato per consentire l'accesso al registro a un singolo utente, principalmente a scopo di test. Non è consigliabile condividere le credenziali dell'account amministratore con più utenti. Negli scenari di tipo headless è consigliabile che gli utenti e le entità servizio abbiano una propria identità. Vedere la Panoramica dell'autenticazione.

Prima di ottenere le credenziali di amministratore, assicurarsi che l'utente amministratore del registro sia abilitato.

Per ottenere la prima password:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

Per ottenere la seconda password:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

L'eliminazione della replica non riesce con lo stato Accesso negato anche se la replica viene eliminata tramite l'interfaccia della riga di comando di Azure o Azure PowerShell

Questo errore si verifica quando l'utente ha le autorizzazioni per un registro, ma non le autorizzazioni a livello di lettura per la sottoscrizione. Per risolvere il problema, assegnare all'utente le autorizzazioni di lettura per la sottoscrizione:

az role assignment create --role "Reader" --assignee user@contoso.com --scope /subscriptions/<subscription_id> 

Le regole del firewall vengono aggiornate correttamente, ma non hanno effetto

La propagazione delle modifiche alle regole del firewall richiede tempo; dopo aver modificato le impostazioni del firewall, attendere alcuni minuti prima di verificare la modifica.

Operazioni sui registri

Come si accede all'API HTTP V2 del registro Docker?

Registro Azure Container supporta l'API HTTP V2 del registro Docker. È possibile accedervi in https://<your registry login server>/v2/. Esempio: https://mycontainerregistry.azurecr.io/v2/

Ricerca per categorie eliminare tutti i manifesti a cui non fa riferimento alcun tag in un repository?

Se si è in Bash:

az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv  | xargs -I% az acr repository delete --name myRegistry ---image myRepository@%

Per PowerShell:

az acr manifest list-metadata --name myRepository --repository myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }

Nota

È possibile aggiungere -y nel comando di eliminazione per ignorare la conferma.

Per altre informazioni, vedere Eliminare le immagini del contenitore in Registro Azure Container.

Perché l'utilizzo della quota del registro non si riduce dopo l'eliminazione di immagini?

Questa situazione può verificarsi se le altre immagini del contenitore fanno ancora riferimento ai livelli sottostanti. Se si elimina un'immagine senza riferimenti, l'utilizzo del registro viene aggiornato in pochi minuti.

Come si convalidano le modifiche della quota di archiviazione?

Creare un'immagine con un livello da 1 GB usando il file Docker seguente. Ciò garantisce che l'immagine abbia un livello che non è condiviso da nessun'altra immagine nel Registro di sistema.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Compilare l'immagine ed eseguirne il push nel registro usando l'interfaccia della riga di comando di Docker.

docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest

Si dovrebbe poter verificare che l'utilizzo dell'archiviazione è aumentato nel portale di Azure oppure è possibile eseguire una query sull'utilizzo usando l'interfaccia della riga di comando.

az acr show-usage -n myregistry

Eliminare l'immagine usando l'interfaccia della riga di comando di Azure o il portale e controllare che l'utilizzo si aggiorni in pochi minuti.

az acr repository delete -n myregistry --image 1gb

Come si esegue l'autenticazione nel registro quando si esegue l'interfaccia della riga di comando in un contenitore?

È necessario eseguire il contenitore dell'interfaccia della riga di comando di Azure montando il socket di Docker:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

Installare docker nel contenitore:

apk --update add docker

In seguito eseguire l'autenticazione nel registro:

az acr login -n MyRegistry

Come si abilita TLS 1.2?

Abilitare TLS 1.2 usando qualsiasi client Docker recente (versione 18.03.0 o successiva).

Importante

A partire dal 13 gennaio 2020, Registro Azure Container richiederà l'uso di TLS 1.2 in tutte le connessioni sicure da server e applicazioni. Il supporto per TLS 1.0 e 1.1 verrà ritirato.

Registro Azure Container supporta l'attendibilità contenuto?

Sì, è possibile usare immagini attendibili in Registro Azure Container perché Docker Notary è stato integrato e può essere abilitato. Per informazioni dettagliate, vedere Attendibilità dei contenuti in Registro Azure Container.

Dove si trova il file per l'identificazione personale?

Si trova in ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata:

  • Le chiavi pubbliche e i certificati di tutti i ruoli, eccetto i ruoli di delega, vengono archiviati in root.json.
  • Le chiavi pubbliche e i certificati del ruolo di delega vengono archiviati nel file JSON del relativo ruolo padre, ad esempio targets.json per il ruolo targets/releases.

È consigliabile verificare le chiavi pubbliche e i certificati dopo la verifica TUF complessiva eseguita dal client Docker e Notary.

Come si concede l'accesso per eseguire il pull o il push delle immagini senza autorizzazione per la gestione della risorsa del registro?

Registro Azure Container supporta ruoli personalizzati che offrono diversi livelli di autorizzazioni. In particolare, i ruoli AcrPull e AcrPush consentono agli utenti di eseguire il pull e/o il push di immagini senza l'autorizzazione per gestire la risorsa del registro in Azure.

  • portale di Azure: Registro di sistema -> Controllo di accesso (IAM) -> Aggiungi (seleziona AcrPull o AcrPush per il ruolo).

  • Interfaccia della riga di comando di Azure: trovare l'ID risorsa del Registro di sistema eseguendo il comando seguente:

    az acr show -n myRegistry
    

    È quindi possibile assegnare il ruolo AcrPull o AcrPush a un utente. Nell'esempio seguente viene usato AcrPull:

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    In alternativa, è possibile assegnare il ruolo a un'entità servizio identificata in base al rispettivo ID applicazione:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

L'assegnatario può quindi autenticarsi e accedere alle immagini nel registro.

  • Per eseguire l'autenticazione in un registro:

    az acr login -n myRegistry 
    
  • Per elencare repository:

    az acr repository list -n myRegistry
    
  • Per eseguire il pull di un'immagine:

    docker pull myregistry.azurecr.io/hello-world
    

Usando solo il ruolo AcrPull o AcrPush, l'assegnatario non ha l'autorizzazione per gestire la risorsa del registro in Azure. Ad esempio, az acr list o az acr show -n myRegistry non visualizzerà il registro.

Come si abilita la quarantena automatica delle immagini per un registro?

La quarantena delle immagini è attualmente una funzionalità di anteprima di Registro Azure Container. È possibile abilitare la modalità di quarantena di un registro in modo che solo le immagini che hanno superato correttamente l'analisi di sicurezza siano visibili agli utenti normali. Per informazioni dettagliate, vedere il repository GitHub di Registro Azure Container.

Come si abilita l'accesso pull anonimo?

Per altre informazioni, vedere Rendere disponibile pubblicamente il contenuto del Registro di sistema.

Come si esegue il push di livelli non distribuibili in un registro?

Un livello non distribuibile in un manifesto contiene un parametro URL da cui è possibile recuperare contenuti. Alcuni casi d'uso possibili per l'abilitazione di push di livelli non distribuibili sono relativi a registri limitati alla rete, registri disconnessi con accesso con limitazioni o registri senza connettività Internet.

Se ad esempio sono state configurate regole di gruppi di sicurezza di rete in modo che una VM possa eseguire il pull di immagini solo dall'istanza del registro Azure Container, Docker eseguirà il pull di errori per livelli esterni/non distribuibili. Se un'immagine di Windows Server Core contiene ad esempio riferimenti a un livello esterno per l'istanza del Registro Azure Container nel manifesto, non sarà possibile eseguirne il pull in questo scenario.

Per abilitare il push di livelli non distribuibili:

  1. Modificare il file daemon.json, che si trova in /etc/docker/ negli host Linux e in C:\ProgramData\docker\config\daemon.json in Windows Server. Supponendo che il file fosse in precedenza vuoto, aggiungere i contenuti seguenti:

    {
      "allow-nondistributable-artifacts": ["myregistry.azurecr.io"]
    }
    

    Nota

    Il valore è una matrice di indirizzi di registro, separati da virgole.

  2. Salvare e chiudere il file.

  3. Riavviare Docker.

Quando si esegue il push di immagini nei registri nell'elenco, viene eseguito il push dei rispettivi livelli non distribuibili nel registro.

Avviso

Gli artefatti non distribuibili includono in genere restrizioni sul modo e sulla posizione in cui possono essere distribuiti e condivisi. Usare questa funzionalità solo per eseguire il push di artefatti nei registri privati. Assicurarsi di rispettare la conformità con eventuali condizioni relative alla ridistribuzione di artefatti non distribuibili.

Controlli di diagnostica e integrità

Controllare l'integrità con 'az acr check-health'

Per risolvere i problemi comuni relativi all'ambiente e al registro, vedere Verificare l'integrità di un registro contenitori di Azure.

Il pull di Docker ha esito negativo con errore: net/http: richiesta annullata durante l'attesa della connessione (Client.Timeout superato durante l'attesa delle intestazioni)

  • Se questo errore è un problema temporaneo, un secondo tentativo avrà esito positivo.
  • Se docker pull ha esito negativo in modo continuo, potrebbe essersi verificato un problema con il daemon di Docker. Il problema può in genere essere risolto riavviando il daemon di Docker.
  • Se si continua a visualizzare questo problema dopo il riavvio del daemon di Docker, il problema potrebbe essere dovuto alla connettività di rete con il computer. Per verificare l'integrità della rete generale nel computer, eseguire il comando seguente per testare la connettività degli endpoint. La versione minima di az acr che contiene questo comando di controllo della connettività è la 2.2.9. Aggiornare l'interfaccia della riga di comando di Azure se si sta usando una versione precedente.
az acr check-health -n myRegistry
  • È necessario avere sempre un meccanismo di ripetizione dei tentativi per tutte le operazioni del client Docker.

Il pull di Docker è lento

Usare lo strumento di velocità per testare la velocità di download della rete del computer. Se la rete del computer è lenta, prendere in considerazione l'uso della macchina virtuale di Azure nella stessa area del registro per migliorare la velocità di rete.

Il push docker è lento

Usare lo strumento di velocità per testare la velocità di caricamento della rete del computer. Se la rete del computer è lenta, prendere in considerazione l'uso della macchina virtuale di Azure nella stessa area del registro per migliorare la velocità di rete.

Il push Docker ha esito positivo ma docker pull ha esito negativo con errore: non autorizzato: autenticazione necessaria

Questo errore può verificarsi con la versione Red Hat del daemon di Docker, in cui --signature-verification è abilitato per impostazione predefinita. È possibile controllare le opzioni del daemon di Docker per Red Hat Enterprise Linux (RHEL) o Fedora eseguendo il comando seguente:

grep OPTIONS /etc/sysconfig/docker

Ad esempio, Fedora 28 Server ha le opzioni del daemon di Docker seguenti:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Se manca --signature-verification=false, docker pull ha esito negativo e restituisce un errore simile al seguente:

Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required

Per risolvere l'errore:

  1. Aggiungere l'opzione --signature-verification=false al file di configurazione del daemon di Docker /etc/sysconfig/docker. Ad esempio:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. Riavviare il sevizio del daemon di Docker eseguendo il comando seguente:

    sudo systemctl restart docker.service
    

I dettagli di --signature-verification sono reperibili eseguendo man dockerd.

az acr login ha esito positivo ma docker ha esito negativo con errore: non autorizzato: autenticazione richiesta

Assicurarsi di usare un URL del server composto interamente da minuscole, ad esempio docker push myregistry.azurecr.io/myimage:latest, anche se il nome della risorsa del registro è maiuscolo o misto, come ad esempio myRegistry.

Abilitare e ottenere i log di debug del daemon Docker

Avviare dockerd con l'opzione debug. Per prima cosa, creare il file di configurazione del daemon di Docker (/etc/docker/daemon.json) se non esiste e aggiungere l'opzione debug:

{    
    "debug": true    
}

In seguito riavviare il daemon. Ad esempio, con Ubuntu 14.04:

sudo service docker restart

Altri dettagli sono disponibili nella documentazione di Docker.

  • I log possono essere generati in posizioni diverse, a seconda del sistema. Ad esempio, per Ubuntu 14.04 possono trovarsi in /var/log/upstart/docker.log.
    Per informazioni dettagliate, vedere la documentazione di Docker.

  • Per Docker per Windows, i log vengono generati in%LOCALAPPDATA%/docker/. Tuttavia, è possibile che non siano presenti ancora tutte le informazioni di debug.

    Per accedere al log del daemon completo, potrebbero essere necessari alcuni passaggi aggiuntivi:

    docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/local/bin/docker alpine sh
    
    docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
    chroot /host
    

    A questo punto è possibile accedere a tutti i file della VM che esegue dockerd. Il log si trova in /var/log/docker.log.

Le nuove autorizzazioni utente potrebbero non essere valide immediatamente dopo l'aggiornamento

Quando si concedono nuove autorizzazioni, ovvero nuovi ruoli, a un'entità servizio, la modifica potrebbe non avere effetto immediato. Le ragioni possono essere due:

  • Ritardo dell'assegnazione dei ruoli di Microsoft Entra. Normalmente è un'operazione veloce, ma potrebbero essere necessari alcuni minuti a causa del ritardo della propagazione.

  • Il ritardo delle autorizzazioni nel server token del Registro Azure Container potrebbe richiedere fino a 10 minuti. Per attenuare questo problema, è possibile eseguire docker logout e quindi eseguire di nuovo l'autenticazione con lo stesso utente dopo un minuto:

    docker logout myregistry.azurecr.io
    docker login myregistry.azurecr.io
    

Attualmente Registro Azure Container non supporta l'eliminazione della replica della pagina iniziale da parte degli utenti. La soluzione alternativa consiste nell'includere la replica della pagina iniziale creata nel modello, ma ignorarne la creazione aggiungendo "condition": false come illustrato di seguito:

{
    "name": "[concat(parameters('acrName'), '/', parameters('location'))]",
    "condition": false,
    "type": "Microsoft.ContainerRegistry/registries/replications",
    "apiVersion": "2017-10-01",
    "location": "[parameters('location')]",
    "properties": {},
    "dependsOn": [
        "[concat('Microsoft.ContainerRegistry/registries/', parameters('acrName'))]"
     ]
},

Le informazioni di autenticazione non sono specificate nel formato corretto nelle chiamate API REST dirette

È possibile che si verifichi un errore InvalidAuthenticationInfo, in particolare quando si usa lo strumento curl con l'opzione -L, --location per seguire i reindirizzamenti. Ad esempio, se si recupera il BLOB usando curl con l'opzione -L e l'autenticazione di base:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

è possibile che venga generata la risposta seguente:

<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:00000000-0000-0000-0000-000000000000
Time:2019-01-01T00:00:00.0000000Z</Message></Error>

La causa radice è che alcune implementazioni di curl seguono i reindirizzamenti con le intestazioni della richiesta originale.

Per risolvere il problema, è necessario seguire manualmente i reindirizzamenti senza le intestazioni. Stampare le intestazioni della risposta con l'opzione -D - di curl ed estrarre l'intestazione Location:

REDIRECT_URL=$(curl -s -D - -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest | grep "^Location: " | cut -d " " -f2 | tr -d '\r')
curl $REDIRECT_URL

Perché il portale di Azure non elenca tutti i repository o i tag dell'utente?

Se si usa il browser Microsoft Edge/IE, è possibile visualizzare al massimo 100 repository o tag. Se il registro contiene più di 100 repository o tag, è consigliabile usare il browser Firefox o Chrome per elencarli tutti.

Perché il portale di Azure non riesce a recuperare i repository o i tag?

Il browser potrebbe non essere in grado di inviare la richiesta di recupero dei repository o dei tag al server. I motivi possono essere diversi, ad esempio:

  • Mancanza di connettività di rete
  • Firewall
  • Uso del portale da una rete pubblica per un registro che consente solo l'accesso privato
  • Blocchi degli annunci
  • Errori DNS

Contattare l'amministratore di rete o controllare la configurazione e la connettività di rete. Provare a eseguire az acr check-health -n yourRegistry usando l'interfaccia della riga di comando di Azure per verificare se l'ambiente in uso può connettersi al Registro Container. È anche possibile provare ad aprire una sessione in incognito o privata nel browser per evitare la cache o i cookie del browser obsoleti.

Perché la richiesta pull o push ha esito negativo con errore di operazione non consentita?

Di seguito sono riportati alcuni scenari in cui è possibile che le operazioni non siano consentite:

  • I registri classici non sono più supportati. Eseguire l'aggiornamento a un livello di servizio supportato usando az acr update o il portale di Azure.
  • L'immagine o il repository possono essere bloccati in modo che non possano essere eliminati o aggiornati. È possibile usare il comando az acr repository show per visualizzare gli attributi correnti.
  • Alcune operazioni non sono consentite se l'immagine è in quarantena. Altre informazioni sulla quarantena.
  • È possibile che il registro abbia raggiunto il rispettivo limite di archiviazione.

Il formato del repository non è valido o non è supportato

Se viene visualizzato un errore di tipo "Formato del repository non supportato", "Formato non valido" o "I dati esistenti non esistono" quando si specifica il nome di un repository nelle operazioni del repository, controllare l'ortografia e la distinzione tra maiuscole/minuscole nel nome. I nomi di repository validi possono includere solo caratteri alfanumerici minuscoli, punti, trattini, caratteri di sottolineatura e barre.

Come si raccolgono le tracce http in Windows?

Prerequisiti

  • Abilitare la decrittografia di HTTPS in Fiddler
  • Abilitare Docker per l'uso di un proxy tramite l'interfaccia utente docker.
  • Assicurarsi di eseguire il ripristino al termine dell'operazione. Docker non funzionerà con questa opzione abilitata e Fiddler non è in esecuzione.

Contenitori Windows

Configurare il proxy di Docker su 127.0.0.1:8888

Contenitori Linux

Trovare l'indirizzo IP del commutatore virtuale della VM Docker:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Configurare il proxy di Docker per restituire l'output del comando precedente e la porta 8888 (ad esempio, 10.0.75.1:8888)

Attività

Come eseguire l'annullamento di operazioni in batch?

I comandi seguenti annullano tutte le attività in esecuzione nel registro specificato.

az acr task list-runs -r $myregistry --run-status Running --query '[].runId' -o tsv \
| xargs -I% az acr task cancel-run -r $myregistry --run-id %

Come si include la cartella .git nel comando az acr build?

Se si passa una cartella di origine locale al comando az acr build, per impostazione predefinita la cartella .git viene esclusa dal pacchetto caricato. È possibile creare un file .dockerignore con l'impostazione seguente. Indica al comando di ripristinare tutti i file in .git nel pacchetto caricato.

!.git/**

Questa impostazione si applica anche al comando az acr run.

Attività del Registro Azure Container supporta GitLab per i trigger di origine?

Attualmente non è supportato GitLab per i trigger di origine.

Quale servizio di gestione del repository Git è supportato da Attività del Registro Azure Container?

Servizio Git Contesto di origine Compilazione manuale Compilazione automatica tramite trigger di commit
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder
Azure Repos https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder No
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder No

Eseguire la risoluzione dei problemi dei messaggi di errore

Messaggio di errore Guida alla risoluzione dei problemi
No access was configured for the VM, hence no subscriptions were found (Nessun accesso è stato configurato per la VM, pertanto non è stata trovata alcuna sottoscrizione) Questo problema può verificarsi se si usa az login --identity in Attività del Registro Azure Container. Si tratta di un errore temporaneo che si verifica quando l'assegnazione di ruolo dell'identità gestita non è stata propagata. Il problema si risolve attendendo alcuni secondi prima di riprovare.

Integrazione CI/CD

Come risolvere se la creazione del pool di agenti non riesce a causa di problemi di timeout?

Configurare le regole corrette dei firewall per i gruppi di sicurezza di rete esistenti o le route definite dall'utente. Dopo l'installazione, attendere alcuni minuti per l'applicazione delle regole del firewall.

Come si abilitano i criteri predefiniti di Azure per i blocchi del Registro Azure Container che abilitano le credenziali di amministratore?

I criteri predefiniti di Azure seguenti, se impostati sul rispettivo stato dei criteri, impediranno all'utente di abilitare l'utente amministratore nel registro.

Criteri predefiniti di Azure Stato dei criteri Amministrazione stato
Configurare i registri contenitori per disabilitare l'account amministratore locale. Modifica Disabilita
I registri contenitori devono avere un account amministratore locale disabilitato. Nega Disabilita
I registri contenitori devono avere un account amministratore locale disabilitato. Controllo non conforme

Passaggi successivi