Modifier

Questions fréquentes - Registres de conteneurs Azure sur Azure Stack Hub

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 sur Azure Stack Hub avec un modèle Resource Manager ?

Oui. Voici un modèle que vous pouvez utiliser pour créer un registre. Ce modèle est destiné au cloud public Azure. Pour utiliser ce modèle sur Azure Stack Hub, modifiez la version de l’API en 2019-05-01. Sinon, le déploiement échoue.

Existe-t-il une analyse des vulnérabilités de sécurité pour les images des registres de conteneurs Azure sur Azure Stack Hub ?

Non. Il n’existe actuellement aucune intégration à Azure Security Center pour les registres déployés sur Azure Stack Hub. Vous pouvez utiliser des options tierces et open source afin de répondre à ce besoin pour les déploiements Azure Stack Hub connectés ou déconnectés.

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]"
}

Comment envoyer (push) une image conteneur dans Azure Container Registry à un déploiement Azure Stack Hub déconnecté exécutant Kubernetes ?

Vous pouvez effectuer un transfert d’image de machine à machine sur un réseau local à partir d’un ordinateur disposant déjà de la ou des images conteneur requises. Pour ce faire :

  1. Tout d’abord, récupérez la ou les images conteneur requises à l’aide d’une machine disposant d’une connectivité Internet à l’aide de l’interface CLI Docker et de la commande docker pull. Pour plus d’informations, consultez Importer des images conteneur dans un registre de conteneurs.

  2. Une fois que vous avez importé les images requises, transportez la machine à l’emplacement de l’instance Azure Hub déconnectée.

  3. Utilisez les commandes docker tag et docker push pour étiqueter et envoyer l’image à l’instance Azure Container Registry locale sur le référentiel Azure Stack Hub.

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.azsacr.<regionname>.<fqdn>/v2/

Comment 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 --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }

Notes

Vous pouvez ajouter --yes 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.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest

Vous devez pouvoir observer l’augmentation de l’utilisation du stockage dans le portail Azure Stack Hub ou interroger l’utilisation avec 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.

Les registres de conteneurs Azure sur Azure Stack Hub prennent-ils en charge l’approbation de contenu ?

Non, la version actuelle des registres de conteneurs Azure sur Azure Stack Hub prend uniquement en charge la référence SKU « Standard » et ne prend pas en charge l’approbation de contenu.

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 Stack Hub : 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.azsacr.<regionname>.<fqdn>/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 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.azsacr.<regionname>.<fqdn>"]
    }
    

    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 cet outil pour tester la vitesse de téléchargement de votre réseau de machines.

La commande docker push est lente

Utilisez cet outil pour tester la vitesse de chargement de votre réseau de machines.

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.azsacr.<regionname>.<fqdn>/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.azsacr.<regionname>.<fqdn>/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 :

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

  • Délai d’autorisation sur le serveur de jetons ACR. Cette opération 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.azsacr.<regionname>.<fqdn>
    docker login myregistry.azsacr.<regionname>.<fqdn>
    

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 Stack Hub ne liste 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 Stack Hub ne parvient 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 :

  • 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

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)

Étapes suivantes