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 concerne le cloud public Azure. Pour utiliser ce modèle sur Azure Stack Hub, modifiez la version de l’API vers 2019-05-01, sinon elle ne parvient pas à être déployée.
Existe-t-il une analyse des vulnérabilités de sécurité pour les images dans Azure Container Registry 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 :
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.
Une fois que vous avez importé les images requises, transportez la machine à l’emplacement de l’instance Azure Hub déconnectée.
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 ?
Azure Container Registry prend en charge l’API HTTP Docker Registry 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 ?
Azure Container Registry 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
ouAcrPush
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
ouAcrPush
à un utilisateur (l’exemple suivant utiliseAcrPull
) :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 :
Modifiez le fichier
daemon.json
, qui se trouve dans/etc/docker/
sur les hôtes Linux et surC:\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.
Enregistrez et fermez le fichier.
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 :
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'
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 :
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.
Délai d’autorisation sur le serveur de jetons Azure Container Registry. 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 d’API REST directs
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
- Activez le déchiffrement HTTPS dans Fiddler : https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS
- Autorisez Docker à utiliser un proxy via l’interface utilisateur Docker : https://docs.docker.com/docker-for-windows/#proxies
- 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)
Étapes suivantes
- Découvrez-en plus sur Azure Container Registry.