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ôletargets/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
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.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 :
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.azurecr.io"] }
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 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 :
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.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
- Découvrez-en plus sur Azure Container Registry.