Questions fréquentes - Azure Container Registry

Cet article aborde les questions fréquemment posées et les problèmes connus liés à Azure Container Registry.

Pour obtenir des instructions sur le dépannage du registre, consultez :

Gestion des ressources

Puis-je créer un registre de conteneurs Azure à l’aide d’un modèle Resource Manager ?

Oui. Voici un modèle que vous pouvez utiliser pour créer un registre.

Existe-t-il une analyse de sécurité des vulnérabilités pour les images dans ACR ?

Oui. Consultez la documentation de Microsoft Defender pour le cloud, Twistlock et Aqua.

Comment configurer Kubernetes avec Azure Container Registry ?

Consultez la documentation de Kubernetes et les étapes concernant Azure Kubernetes Service.

Comment obtenir des informations d’identification administrateur pour un registre de conteneurs ?

Important

Le compte d’utilisateur administrateur est conçu pour permettre à un seul utilisateur d’accéder au registre, principalement à des fins de test. Nous ne recommandons pas de partager les informations d’identification du compte d’administrateur avec plusieurs utilisateurs. Une identité individuelle est recommandée pour les utilisateurs et principaux du service pour les scénarios sans périphérique de contrôle. Consultez Vue d’ensemble de l’authentification.

Avant d’obtenir les informations d’identification administrateur, vérifiez que l’utilisateur administrateur du registre est activé.

Pour obtenir les informations d’identification à l’aide de l’interface de ligne de commande Azure :

az acr credential show -n myRegistry

Utilisation d’Azure PowerShell :

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

Comment obtenir des informations d’identification administrateur dans un modèle Resource Manager ?

Important

Le compte d’utilisateur administrateur est conçu pour permettre à un seul utilisateur d’accéder au registre, principalement à des fins de test. Nous ne recommandons pas de partager les informations d’identification du compte d’administrateur avec plusieurs utilisateurs. Une identité individuelle est recommandée pour les utilisateurs et principaux du service pour les scénarios sans périphérique de contrôle. Consultez Vue d’ensemble de l’authentification.

Avant d’obtenir les informations d’identification administrateur, vérifiez que l’utilisateur administrateur du registre est activé.

Pour obtenir le premier mot de passe :

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

Pour obtenir le second mot de passe :

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

La suppression de la réplication échoue avec l’état Forbidden (Interdit), bien que la réplication soit supprimée à l’aide de l’interface de ligne de commande Azure ou d’Azure PowerShell

L’erreur se produit quand l’utilisateur dispose d’autorisations sur un registre, mais ne dispose pas d’autorisations de niveau Lecteur sur l’abonnement. Pour résoudre ce problème, attribuez des autorisations Lecteur sur l’abonnement à l’utilisateur :

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

Les règles de pare-feu sont correctement mises à jour, mais ne prennent pas effet

La propagation des modifications apportées aux règles de pare-feu prend un certain temps. Une fois que vous avez changé les paramètres de pare-feu, veuillez patienter quelques minutes avant de vérifier le changement apporté.

Opérations du registre

Comment accéder à Docker Registry HTTP API V2 ?

ACR prend en charge Docker Registry HTTP API V2. Les API sont accessibles à l’adresse https://<your registry login server>/v2/. Exemple : https://mycontainerregistry.azurecr.io/v2/

Comment faire pour supprimer tous les manifestes qui ne sont référencés par aucune étiquette dans un dépôt ?

Si vous êtes sur 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@%

Pour 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@$_ }

Notes

Vous pouvez ajouter -y dans la commande de suppression pour ignorer la confirmation.

Pour plus d’informations, consultez Supprimer des images conteneur dans Azure Container Registry.

Pourquoi l’utilisation du quota du registre ne diminue-t-elle pas après la suppression d’images ?

Cette situation peut se produire si les couches sous-jacentes sont toujours référencées par d’autres images conteneur. Si vous supprimez une image sans aucune référence, l’utilisation du registre est mise à jour en quelques minutes.

Comment valider les modifications de quotas de stockage ?

Créez une image avec une couche de 1 Go à l’aide du fichier docker suivant. Ainsi, l’image a une couche qui n’est partagée par aucune autre image dans le registre.

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

Générez l’image et envoyez-la (push) à votre registre à l’aide de l’interface CLI docker.

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

Vous devez être en mesure de voir que l’utilisation du stockage a augmenté dans le portail Azure, ou vous pouvez interroger l’utilisation à l’aide de l’interface CLI.

az acr show-usage -n myregistry

Supprimez l’image à l’aide de l’interface de ligne de commande Azure ou du portail et vérifiez que l’utilisation a été mise à jour au bout de quelques minutes.

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

Comment m’authentifier auprès de mon registre lors de l’exécution de l’interface CLI dans un conteneur ?

Vous devez exécuter le conteneur Azure CLI en montant le socket Docker :

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

Dans le conteneur, installez docker :

apk --update add docker

Ensuite, authentifiez-vous auprès du registre :

az acr login -n MyRegistry

Comment activer TLS 1.2 ?

Activez TLS 1.2 à l’aide de n’importe quel client docker récent (versions 18.03.0 et ultérieures).

Important

À partir du 13 janvier 2020, Azure Container Registry exigera l’utilisation de TLS 1.2 pour toutes les connexions sécurisées établies à partir des serveurs et des applications. TLS 1.0 et 1.1 ne seront plus pris en charge.

Azure Container Registry prend-il en charge l’approbation de contenu ?

Oui, vous pouvez utiliser des images approuvées dans Azure Container Registry, étant donné que Docker Notary a été intégré et peut être activé. Pour plus d’informations, consultez Approbation de contenu dans Azure Container Registry.

Où se trouve le fichier de l’empreinte ?

Sous ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata :

  • Les clés publiques et les certificats de tous les rôles (à l’exception des rôles de délégation) sont stockés dans root.json.
  • Les clés publiques et les certificats du rôle de délégation sont stockés dans le fichier JSON de son rôle parent (par exemple targets.json pour le rôle targets/releases).

Il est recommandé de vérifier ces clés publiques et certificats une fois que le client Docker Notary a procédé à une vérification globale au moyen du framework TUF.

Comment octroyer l’accès au tirage (pull) ou à l’envoi (push) d’images sans autorisation de gérer la ressource du registre ?

ACR prend en charge les rôles personnalisés qui fournissent différents niveaux d’autorisations. Plus précisément, les rôles AcrPull et AcrPush permettent aux utilisateurs de tirer (pull) et/ou d’envoyer (push) des images sans l’autorisation de gérer la ressource du registre dans Azure.

  • Portail Azure : Votre registre -> Contrôle d’accès (IAM) -> Ajouter (sélectionnez AcrPull ou AcrPush pour le rôle).

  • Azure CLI : Recherchez l’ID de ressource du registre en exécutant la commande suivante :

    az acr show -n myRegistry
    

    Vous pouvez ensuite attribuer le rôle AcrPull ou AcrPush à un utilisateur (l’exemple suivant utilise AcrPull) :

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

    Ou bien, attribuez le rôle à un principal de service identifié par son ID d’application :

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

Le destinataire est alors en mesure de s’authentifier et d’accéder aux images dans le registre.

  • Pour s’authentifier auprès du registre :

    az acr login -n myRegistry 
    
  • Pour lister les dépôts :

    az acr repository list -n myRegistry
    
  • Pour tirer (pull) une image :

    docker pull myregistry.azurecr.io/hello-world
    

À l’aide du seul rôle AcrPull ou AcrPush, le destinataire n’est pas autorisé à gérer la ressource du registre dans Azure. Par exemple, az acr list ou az acr show -n myRegistry n’affiche pas le registre.

Comment activer le contrôle automatique des images pour un registre ?

Le contrôle des images est une fonctionnalité d’évaluation d’ACR. Vous pouvez activer le mode de contrôle d’un registre afin que seules les images qui ont franchi avec succès la phase d’analyse de sécurité soient visibles par les utilisateurs normaux. Pour plus d’informations, consultez le dépôt GitHub ACR.

Comment activer l’accès par tirage (pull) anonyme ?

Pour plus d’informations, consultez Rendre le contenu du registre disponible publiquement.

Comment faire envoyer des couches non distribuable à un registre ?

Les couches non distribuables dans un manifeste contiennent un paramètre d’URL à partir duquel le contenu peut être extrait. Certains cas d’utilisation possibles pour l’activation des pushs de couche non distribuable sont pour les registres restreints du réseau, les registres d’accès direct $$$à l’air avec accès restreint ou pour les registres sans connectivité Internet.

Par exemple, si vous avez configuré des règles de groupe de sécurité réseau de manière à ce qu’une machine virtuelle puisse extraire des images uniquement de votre registre de conteneurs Azure, Docker extrait des échecs pour les couches étrangères/non distribuable. Par exemple, une image Windows Server Core peut contenir des références de couche étrangère à Azure Container Registry dans son manifeste et ne pas parvenir à effectuer une extraction dans ce scénario.

Pour activer le push de couches non distribuables :

  1. Modifiez le fichier daemon.json, qui se trouve dans /etc/docker/ sur les hôtes Linux et sur C:\ProgramData\docker\config\daemon.json dans Windows Server. En supposant que le fichier était déjà vide, ajoutez le contenu suivant :

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

    Notes

    La valeur est un tableau d’adresses du registre, séparées par des virgules.

  2. Enregistrez et fermez le fichier.

  3. Redémarrez Docker.

Lorsque vous envoyez des images aux registres de la liste, leurs couches non distribuables sont envoyées au registre.

Avertissement

Les artefacts non distribuable sont généralement soumis à des restrictions quant à la façon dont ils peuvent être distribués et partagés. Utilisez cette fonctionnalité uniquement pour envoyer des artefacts vers des registres privés. Assurez-vous que vous respectez toutes les conditions régissant la redistribution des artefacts non distribuables.

Diagnostics et contrôles d’intégrité

Vérifier l’intégrité avec « az acr check-health »

Pour résoudre les problèmes courants liés à l’environnement et au registre, consultez Vérifier l’intégrité d’un registre de conteneurs Azure.

La commande Docker pull échoue avec l’erreur : net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

  • Si cette erreur est un problème temporaire, une nouvelle tentative réussit.
  • Si docker pull échoue en permanence, un problème affecte peut-être le démon Docker. Vous pouvez généralement résoudre le problème en redémarrant le démon Docker.
  • Si vous continuez à voir ce problème après le redémarrage du démon Docker, il se peut que la machine ait un problème de connectivité réseau. Pour vérifier si le réseau d’ordre général sur la machine est sain, exécutez la commande suivante afin de tester la connectivité du point de terminaison. La version az acr minimale qui contient cette vérification de la connectivité est 2.2.9. Si vous utilisez une version antérieure, mettez à niveau votre interface de ligne de commande Azure.
az acr check-health -n myRegistry
  • Vous devez toujours avoir un mécanisme de nouvelle tentative sur toutes les opérations du client Docker.

La commande docker pull est lente

Utilisez l’outil d’évaluation pour tester la vitesse de téléchargement de votre réseau de machines. Si le réseau de machines est lent, envisagez d’utiliser la machine virtuelle Azure dans la même région que votre registre pour améliorer la vitesse du réseau.

La commande docker push est lente

Utilisez l’outil d’évaluation pour tester la vitesse de chargement de votre réseau de machines. Si le réseau de machines est lent, envisagez d’utiliser la machine virtuelle Azure dans la même région que votre registre pour améliorer la vitesse du réseau.

La commande docker push réussit, mais la commande docker pull échoue avec l’erreur : unauthorized: authentication required

Cette erreur peut se produire avec la version Red Hat du démon Docker, où --signature-verification est activé par défaut. Vous pouvez vérifier les options du démon Docker pour RHEL (Red Hat Enterprise Linux) ou Fedora en exécutant la commande suivante :

grep OPTIONS /etc/sysconfig/docker

Par exemple, Fedora 28 Server présente les options du démon docker suivantes :

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

Quand --signature-verification=false fait défaut, docker pull échoue avec une erreur similaire à la suivante :

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

Pour résoudre l’erreur :

  1. Ajoutez l’option --signature-verification=false au fichier de configuration du démon Docker /etc/sysconfig/docker. Par exemple :

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

  2. Redémarrez le service du démon Docker en exécutant la commande suivante :

    sudo systemctl restart docker.service
    

Pour obtenir des informations détaillées sur --signature-verification, vous pouvez exécuter man dockerd.

la connexion az acr est réussie, mais docker a échoué avec l’erreur : non autorisé : authentification requise

Assurez-vous d’utiliser une URL de serveur tout en minuscules, par exemple, docker push myregistry.azurecr.io/myimage:latest, même si le nom de la ressource du registre est en majuscules ou à casse mixte, comme myRegistry.

Activer et obtenir les journaux de débogage du démon docker

Démarrez dockerd avec l’option debug. Tout d’abord, créez le fichier de configuration du démon Docker (/etc/docker/daemon.json) s’il n’existe pas et ajoutez l’option debug :

{    
    "debug": true    
}

Ensuite, redémarrez le démon. Par exemple, avec Ubuntu 14.04 :

sudo service docker restart

Des informations détaillées sont disponibles dans la documentation Docker.

  • Vous pouvez générer les journaux à différents emplacements, selon votre système. Par exemple, pour Ubuntu 14.04, il s’agit de /var/log/upstart/docker.log.
    Consultez la documentation Docker pour plus d’informations.

  • Concernant Docker pour Windows, les journaux sont générés sous %LOCALAPPDATA%/docker/. Il se peut toutefois qu’ils ne contiennent pas encore toutes les informations de débogage.

    Pour accéder au journal complet du démon, vous devrez peut-être suivre quelques étapes supplémentaires :

    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
    

    Maintenant, vous avez accès à tous les fichiers de la machine virtuelle en exécutant dockerd. Le journal se trouve à l’emplacement /var/log/docker.log.

Les nouvelles autorisations utilisateur peuvent ne pas entrer en vigueur dès la mise à jour

Quand vous accordez de nouvelles autorisations (nouveaux rôles) à un principal de service, la modification peut ne pas prendre effet immédiatement. Il existe deux raisons possibles :

  • Délai d’attribution du rôle Microsoft Entra. Normalement, l’attribution est rapide, mais elle peut prendre quelques minutes en raison du délai de propagation.

  • Le délai d’autorisation sur le serveur de jetons ACR peut prendre jusqu’à 10 minutes. Pour limiter ce délai, vous pouvez exécuter la commande docker logout, puis vous réauthentifier avec le même utilisateur après 1 minute :

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

ACR ne prend pas en charge la suppression de la réplication de base par les utilisateurs. La solution de contournement consiste à inclure l’opération de création de la réplication de base dans le modèle, mais à ignorer sa création en ajoutant "condition": false comme indiqué ci-dessous :

{
    "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'))]"
     ]
},

Les informations d’authentification ne sont pas fournies dans le format correct sur les appels directs de l’API REST

Vous pouvez rencontrer une erreur InvalidAuthenticationInfo, en particulier en utilisant l’outil curl avec l’option -L, --location (pour suivre les redirections). Par exemple, la récupération (fetch) de l’objet blob en utilisant curl avec l’option -L et l’authentification de base :

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

Peut entraîner la réponse suivante :

<?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 cause racine est que certaines implémentations curl suivent les redirections avec des en-têtes de la demande d’origine.

Pour résoudre le problème, vous devez suivre les redirections manuellement sans les en-têtes. Récupérez les en-têtes de réponse avec l’option -D - de curl et extrayez l’en-têteLocation  :

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

Pourquoi le portail Azure ne liste-t-il pas tous mes dépôts ou étiquettes ?

Si vous utilisez le navigateur Microsoft Edge/Internet Explorer, vous pouvez voir au maximum 100 dépôts ou étiquettes. Si votre registre a plus de 100 dépôts ou étiquettes, nous vous recommandons d’utiliser le navigateur Firefox ou Chrome pour les lister tous.

Pourquoi le portail Azure ne parvient-il pas à récupérer les dépôts ou les étiquettes ?

Le navigateur n'est peut-être pas en mesure d'envoyer la demande de récupération de dépôts ou d'étiquettes au serveur. Les raisons peuvent être diverses :

  • Absence de connectivité réseau
  • Pare-feu
  • Utilisation du portail à partir d’un réseau public pour un registre qui autorise uniquement l’accès privé
  • Bloqueurs de publicités
  • Erreurs DNS

Contactez votre administrateur réseau ou vérifiez la configuration et la connectivité de votre réseau. Essayez d’exécuter az acr check-health -n yourRegistry à l’aide de votre Azure CLI pour vérifier si votre environnement est en mesure de se connecter au registre de conteneurs. En outre, vous pouvez également essayer une session incognito ou privée dans votre navigateur pour éviter tout cache ou cookie périmé.

Pourquoi ma requête tirer (pull) ou envoyer (push) échoue-t-elle avec une opération non autorisée ?

Voici quelques scénarios dans lesquels les opérations peuvent ne pas être autorisées :

  • Les registres classiques ne sont plus pris en charge. Effectuez une mise à niveau vers un niveau de service pris en charge à l’aide de la commande az acr update ou du portail Azure.
  • L’image ou le référentiel peuvent être verrouillés afin qu’il ne soit pas possible de les supprimer ou de les mettre à jour. Vous pouvez utiliser la commande az acr show repository pour afficher les attributs actuels.
  • Certaines opérations ne sont pas autorisées si l’image est en contrôle. En savoir plus sur le contrôle.
  • Votre registre a peut-être atteint sa limite de stockage.

Le format du référentiel n’est pas valide ou n’est pas pris en charge

Si vous voyez une erreur telle que « format de référentiel non pris en charge », « format non valide » ou « les données requises n’existent pas » lors de la spécification d’un nom de référentiel dans les opérations de référentiel, vérifiez l’orthographe du nom. Les noms de référentiel valides ne peuvent inclure que des caractères alphanumériques en minuscules, des points, des tirets, des tirets du bas et des barres obliques.

Comment collecter les traces http sur Windows ?

Prérequis

  • Activez le déchiffrement HTTPS dans Fiddler
  • Autorisez Docker à utiliser un proxy via l’interface utilisateur Docker.
  • Veillez à revenir à la configuration antérieure une fois que vous avez terminé. Docker ne fonctionne pas si ces options sont activées et que Fiddler n’est pas en cours d’exécution.

Conteneurs Windows

Configurez le proxy Docker sur 127.0.0.1:8888.

Conteneurs Linux

Recherchez l’adresse IP du commutateur virtuel de machine virtuelle Docker :

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

Configurez le proxy Docker sur la sortie de la commande précédente et le port 8888 (par exemple 10.0.75.1:8888)

Tâches

Comment annuler des exécutions par lots ?

Les commandes suivantes annulent toutes les tâches en cours d’exécution dans le registre spécifié.

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 %

Comment inclure le dossier .git dans la commande az acr build ?

Si vous passez un dossier source local à la commande az acr build, le dossier .git est exclu du package chargé par défaut. Vous pouvez créer un fichier .dockerignore avec le paramètre suivant. Il indique à la commande de restaurer tous les fichiers sous .git dans le package chargé.

!.git/**

Ce paramètre s’applique également à la commande az acr run.

Les tâches prennent-elles en charge GitLab pour les déclencheurs source ?

Nous ne prenons actuellement pas en charge GitLab pour les déclencheurs source.

Quel est le service de gestion du référentiel Git pris en charge par les tâches ?

Service Git Contexte source Build manuelle Génération automatique via un déclencheur de validation
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder Oui Oui
Azure Repos https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Oui Oui
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder Oui Non
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Oui Non

Exécuter la résolution des problèmes liés aux messages d’erreur

Message d’erreur Guide de résolution des problèmes
Aucun accès n’a été configuré pour la machine virtuelle, ainsi aucun abonnement n’a été trouvé Cela peut se produire si vous utilisez az login --identity dans votre tâche ACR. Il s’agit d’une erreur temporaire qui se produit lorsque l’attribution de rôle de votre identité managée n’a pas été propagée. Attendez quelques secondes avant de réessayer.

Intégration CI/CD

Comment faire si la création du pool d’agents échoue en raison de problèmes liés à un délai d’expiration ?

Configurez les règles de pare-feu appropriées pour les groupes de sécurité réseau existants ou les itinéraires définis par l’utilisateur. Après la configuration, attendez quelques minutes pour que les règles de pare-feu s’appliquent.

Comment l’activation de la stratégie intégrée Azure pour ACR bloque-t-elle l’activation des informations d’identification d’administrateur ?

La stratégie intégrée Azure suivante, quand elle est définie sur l’état de la stratégie respective, empêche l’utilisateur d’activer l’utilisateur administrateur sur son registre.

Stratégie intégrée Azure État de la stratégie État de l’administrateur
Configurer les registres de conteneurs pour désactiver le compte administrateur local. Modifier Désactiver
Le compte administrateur local des registres de conteneurs doit être désactivé. Deny Désactiver
Le compte administrateur local des registres de conteneurs doit être désactivé. Audit non conforme

Étapes suivantes