In dit artikel worden veelgestelde vragen en bekende problemen met betrekking tot Azure Container Registry.
Zie voor hulp bij het oplossen van problemen met het register:
Resourcebeheer
Kan ik een Azure Container Registry maken met behulp van Resource Manager sjabloon?
Ja. Hier ziet u een sjabloon die u kunt gebruiken om een register te maken.
Is er scannen op beveiligingsprobleem voor afbeeldingen in ACR?
Ja. Zie de documentatie van Microsoft Defender for Cloud, Twistlock en Aqua.
Hoe kan ik Kubernetes configureren met Azure Container Registry?
Zie de documentatie voor Kubernetes en de stappen voor Azure Kubernetes Service.
Hoe kan ik beheerdersreferenties voor een containerregister op te halen?
Belangrijk
Het beheerdersaccount is ontworpen voor één gebruiker om toegang te krijgen tot het register, voornamelijk voor testdoeleinden. U kunt het beste de referenties van het beheerdersaccount niet delen met meerdere gebruikers. Afzonderlijke identiteiten worden aanbevolen voor gebruikers en service-principals voor headless scenario's. Zie Overzicht van verificatie.
Voordat u beheerdersreferenties krijgt, moet u ervoor zorgen dat de gebruiker met beheerdersrechten van het register is ingeschakeld.
Referenties op te halen met behulp van de Azure CLI:
az acr credential show -n myRegistry
Azure PowerShell gebruiken:
Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry
Hoe kan ik beheerdersreferenties in een Resource Manager sjabloon?
Belangrijk
Het beheerdersaccount is ontworpen voor één gebruiker om toegang te krijgen tot het register, voornamelijk voor testdoeleinden. U kunt het beste de referenties van het beheerdersaccount niet delen met meerdere gebruikers. Afzonderlijke identiteiten worden aanbevolen voor gebruikers en service-principals voor headless scenario's. Zie Overzicht van verificatie.
Voordat u beheerdersreferenties krijgt, moet u ervoor zorgen dat de gebruiker met beheerdersrechten van het register is ingeschakeld.
Het eerste wachtwoord op te halen:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}
Het tweede wachtwoord op te halen:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}
Verwijderen van replicatie mislukt met de status Verboden, hoewel de replicatie wordt verwijderd met behulp van de Azure CLI of Azure PowerShell
De fout wordt weergegeven wanneer de gebruiker machtigingen heeft voor een register, maar geen machtigingen op lezerniveau heeft voor het abonnement. U kunt dit probleem oplossen door lezersmachtigingen voor het abonnement toe te wijzen aan de gebruiker:
az role assignment create --role "Reader" --assignee user@contoso.com --scope /subscriptions/<subscription_id>
Firewallregels worden bijgewerkt, maar ze worden niet van kracht
Het duurt enige tijd om wijzigingen in de firewallregel door te voeren. Nadat u de firewallinstellingen hebt gewijzigd, wacht u enkele minuten voordat u deze wijziging verifieert.
Registerbewerkingen
Hoe kan ik toegang tot de HTTP API V2 van Docker Registry?
ACR biedt ondersteuning voor HTTP API V2 voor Docker Registry. De API's zijn toegankelijk via https://<your registry login server>/v2/ . Voorbeeld: https://mycontainerregistry.azurecr.io/v2/
Hoe kan ik alle manifesten verwijderen waarnaar niet wordt verwezen door een tag in een opslagplaats?
Als u met bash te maken hebt:
az acr repository show-manifests -n myRegistry --repository myRepository --query "[?tags[0]==null].digest" -o tsv | xargs -I% az acr repository delete -n myRegistry -t myRepository@%
Voor PowerShell:
az acr repository show-manifests -n myRegistry --repository myRepository --query "[?tags[0]==null].digest" -o tsv | %{ az acr repository delete -n myRegistry -t myRepository@$_ }
Notitie
U kunt de opdracht -y verwijderen toevoegen om de bevestiging over te slaan.
Zie Containerafbeeldingen verwijderen inAzure Container Registry.
Waarom wordt het gebruik van het registerquotum niet beperkt na het verwijderen van afbeeldingen?
Deze situatie kan zich voor doen als er nog steeds wordt verwezen naar de onderliggende lagen door andere containerafbeeldingen. Als u een afbeelding verwijdert zonder verwijzingen, wordt het registergebruik binnen enkele minuten bijgewerkt.
Hoe kan ik opslagquotumwijzigingen valideren?
Maak een afbeelding met een laag van 1 GB met behulp van het volgende Docker-bestand. Dit zorgt ervoor dat de afbeelding een laag heeft die niet wordt gedeeld door een andere afbeelding in het register.
FROM alpine
RUN dd if=/dev/urandom of=1GB.bin bs=32M count=32
RUN ls -lh 1GB.bin
Bouw de afbeelding en push deze naar het register met behulp van de docker-CLI.
docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest
U moet kunnen zien dat het opslaggebruik is toegenomen in de Azure Portal of u kunt query's uitvoeren op het gebruik met behulp van de CLI.
az acr show-usage -n myregistry
Verwijder de afbeelding met behulp van de Azure CLI of de portal en controleer binnen enkele minuten het bijgewerkte gebruik.
az acr repository delete -n myregistry --image 1gb
Hoe kan ik verifiëren met mijn register bij het uitvoeren van de CLI in een container?
U moet de Azure CLI-container uitvoeren door de Docker-socket te monteren:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev
Installeer in de container docker :
apk --update add docker
Verifieert u vervolgens met uw register:
az acr login -n MyRegistry
TLS 1.2 inschakelen
Schakel TLS 1.2 in met behulp van een recente Docker-client (versie 18.03.0 en hoger).
Belangrijk
Vanaf 13 januari 2020 moeten voor Azure Container Registry alle beveiligde verbindingen van servers en toepassingen TLS 1.2 gebruiken. Ondersteuning voor TLS 1.0 en 1.1 wordt buiten gebruik gesteld.
Biedt Azure Container Registry ondersteuning voor Inhoud vertrouwen?
Ja, u kunt vertrouwde afbeeldingen in Azure Container Registry, omdat de Docker Notary is geïntegreerd en kan worden ingeschakeld. Zie Inhoud vertrouwen in Azure Container Registry.
Waar bevindt het bestand voor de vingerafdruk zich?
Onder ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata :
- Openbare sleutels en certificaten van alle rollen (behalve delegeringsrollen) worden opgeslagen in de
root.json. - Openbare sleutels en certificaten van de delegeringsrol worden opgeslagen in het JSON-bestand van de bovenliggende rol (bijvoorbeeld
targets.jsonvoor detargets/releasesrol).
Het wordt aanbevolen om deze openbare sleutels en certificaten te verifiëren na de algemene TUF-verificatie door de Docker- en Notary-client.
Hoe kan ik toegang verlenen tot pull- of push-afbeeldingen zonder toestemming voor het beheren van de registerresource?
ACR ondersteunt aangepaste rollen die verschillende machtigingsniveaus bieden. Met rollen AcrPull en kunnen gebruikers met name afbeeldingen AcrPush pullen en/of pushen zonder de machtiging om de registerresource in Azure te beheren.
Azure Portal: Uw register -> Access Control (IAM) - > Toevoegen (Selecteren
AcrPullAcrPushof voor de rol).Azure CLI: zoek de resource-id van het register door de volgende opdracht uit te voeren:
az acr show -n myRegistryVervolgens kunt u de rol
AcrPullof toewijzen aan een gebruikerAcrPush(in het volgende voorbeeld wordtAcrPullgebruikt):az role assignment create --scope resource_id --role AcrPull --assignee user@example.comOf wijs de rol toe aan een service-principal die wordt geïdentificeerd door de toepassings-id:
az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
De toegewezene kan vervolgens de afbeeldingen in het register verifiëren en openen.
Verifiëren bij een register:
az acr login -n myRegistryOpslagplaatsen op een lijst zetten:
az acr repository list -n myRegistryEen afbeelding pullen:
docker pull myregistry.azurecr.io/hello-world
Door alleen de rol of te gebruiken, heeft de toegewezene niet de machtiging om de registerresource AcrPull AcrPush in Azure te beheren. Het register az acr list wordt bijvoorbeeld wel of niet weer az acr show -n myRegistry geven.
Hoe kan ik automatische quarantaine van afbeeldingen inschakelen voor een register?
Quarantaine van afbeeldingen is momenteel een preview-functie van ACR. U kunt de quarantainemodus van een register inschakelen, zodat alleen de afbeeldingen die zijn geslaagd voor de beveiligingsscan zichtbaar zijn voor normale gebruikers. Zie de ACR-GitHub voor meer informatie.
Hoe schakel ik anonieme pull-toegang in?
Zie Uw registerinhoud openbaar beschikbaar maken voor meer informatie.
Hoe kan ik niet-distribueerbare lagen naar een register pushen?
Een niet-distribueerbare laag in een manifest bevat een URL-parameter waar inhoud van kan worden opgehaald. Sommige mogelijke gebruiksgevallen voor het inschakelen van niet-distribueerbare laag-pushes zijn voor beperkte netwerkregisters, registers met beperkte toegang via de lucht of voor registers zonder internetverbinding.
Als u bijvoorbeeld NSG-regels hebt ingesteld zodat een VM alleen afbeeldingen uit uw Azure-containerregister kan halen, zal Docker fouten voor vreemde/niet-distribueerbare lagen op halen. Zo bevat een Windows Server Core-afbeelding referente laagverwijzingen naar het Azure-containerregister in het manifest en kan deze niet worden opgeslagen in dit scenario.
Pushen van niet-distribueerbare lagen inschakelen:
Bewerk
daemon.jsonhet bestand, dat zich in bevindt/etc/docker/op Linux-hosts en opC:\ProgramData\docker\config\daemon.jsonWindows Server. Ervan uitgaande dat het bestand eerder leeg was, voegt u de volgende inhoud toe:{ "allow-nondistributable-artifacts": ["myregistry.azurecr.io"] }Notitie
De waarde is een matrix met registeradressen, gescheiden door komma's.
Sla het bestand op en sluit het af.
Start Docker opnieuw.
Wanneer u afbeeldingen naar de registers in de lijst pusht, worden de niet-distribueerbare lagen naar het register pushen.
Waarschuwing
Niet-distribueerbare artefacten hebben doorgaans beperkingen voor hoe en waar ze kunnen worden gedistribueerd en gedeeld. Gebruik deze functie alleen om artefacten naar privéregisters te pushen. Zorg ervoor dat u voldoet aan alle voorwaarden die betrekking hebben op het opnieuw distribueren van niet-distribueerbare artefacten.
Diagnostische gegevens en statuscontroles
Status controleren met `az acr check-health`
Zie De status van een Azure-containerregister controlerenom veelvoorkomende problemen met de omgeving en het register op te lossen.
Docker pull mislukt met fout: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) (Docker pull mislukt met fout: net/http: request canceled while waiting for connection (Client.Timeout is overschreden tijdens het wachten op headers)
- Als deze fout een tijdelijk probleem is, lukt het opnieuw proberen.
- Als
docker puller continu een fout is, kan er een probleem zijn met de Docker-daemon. Het probleem kan over het algemeen worden vereend door de Docker-daemon opnieuw op te starten. - Als u dit probleem blijft zien na het opnieuw opstarten van de Docker-daemon, kan het probleem een aantal problemen met de netwerkverbinding met de computer zijn. Als u wilt controleren of het algemene netwerk op de computer in orde is, moet u de volgende opdracht uitvoeren om de eindpuntconnectiviteit te testen. De minimale
az acrversie die deze connectiviteitscontroleopdracht bevat, is 2.2.9. Werk uw Azure CLI bij als u een oudere versie gebruikt.
az acr check-health -n myRegistry
- U moet altijd een mechanisme voor opnieuw proberen hebben voor alle bewerkingen van de Docker-client.
Docker-pull is traag
Gebruik dit hulpprogramma om de downloadsnelheid van uw computernetwerk te testen. Als het machinenetwerk traag is, kunt u overwegen azure-VM te gebruiken in dezelfde regio als uw register. Dit zorgt meestal voor een snellere netwerksnelheid.
Docker-push is traag
Gebruik dit hulpprogramma om de uploadsnelheid van uw computernetwerk te testen. Als het machinenetwerk traag is, kunt u overwegen azure-VM te gebruiken in dezelfde regio als uw register. Dit zorgt meestal voor een snellere netwerksnelheid.
Docker-push slaagt, maar docker pull mislukt met fout: niet geautoriseerd: verificatie vereist
Deze fout kan zich voor doen met de Red Hat-versie van de Docker-daemon, waarbij --signature-verification standaard is ingeschakeld. U kunt de Docker-daemonopties voor Red Hat Enterprise Linux (RHEL) of Fedora controleren door de volgende opdracht uit te voeren:
grep OPTIONS /etc/sysconfig/docker
Fedora 28 Server heeft bijvoorbeeld de volgende opties voor docker-daemon:
OPTIONS='--selinux-enabled --log-driver=journald --live-restore'
Als --signature-verification=false deze ontbreekt, docker pull mislukt met een fout die lijkt op:
Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required
De fout oplossen:
Voeg de optie toe aan het configuratiebestand van de
--signature-verification=falseDocker-daemon./etc/sysconfig/dockerBijvoorbeeld:OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'Start de Docker-daemon-service opnieuw door de volgende opdracht uit te voeren:
sudo systemctl restart docker.service
Details van --signature-verification vindt u door uit te man dockerd gaan.
az acr login succeeds but docker fails with error: unauthorized: authentication required
Zorg ervoor dat u een server-URL in kleine letters gebruikt, bijvoorbeeld , zelfs als de resourcenaam van het register hoofdletters of hoofdletters of hoofdletters docker push myregistry.azurecr.io/myimage:latest is, zoals myRegistry .
De foutopsporingslogboeken van de Docker-daemon inschakelen en op halen
Begin dockerd met de optie debug . Maak eerst het configuratiebestand van de Docker-daemon ( ) als het nog niet /etc/docker/daemon.json bestaat en voeg de optie debug toe:
{
"debug": true
}
Start vervolgens de daemon opnieuw. Bijvoorbeeld met Ubuntu 14.04:
sudo service docker restart
Meer informatie vindt u in de Docker-documentatie.
De logboeken kunnen op verschillende locaties worden gegenereerd, afhankelijk van uw systeem. Voor Ubuntu 14.04 is dit bijvoorbeeld
/var/log/upstart/docker.log.
Zie Docker-documentatie voor meer informatie.Voor Docker voor Windows worden de logboeken gegenereerd onder %LOCALAPPDATA%/docker/. Het kan echter nog niet alle foutopsporingsinformatie bevatten.
Voor toegang tot het volledige daemonlogboek hebt u mogelijk een aantal extra stappen nodig:
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 /hostU hebt nu toegang tot alle bestanden van de VM met
dockerd. Het logboek is op/var/log/docker.log.
Nieuwe gebruikersmachtigingen zijn mogelijk niet onmiddellijk van kracht na het bijwerken
Wanneer u nieuwe machtigingen (nieuwe rollen) aan een service-principal verleent, wordt de wijziging mogelijk niet onmiddellijk doorgevoerd. Er zijn twee mogelijke redenen:
Azure Active Directory roltoewijzing vertragen. Normaal gesproken gaat het snel, maar dit kan minuten duren vanwege een vertraging bij het doorgeven.
Machtigingsvertraging op ACR-tokenserver. Dit kan tot 10 minuten duren. U kunt dit verhelpen door na 1 minuut opnieuw te verifiëren
docker logoutbij dezelfde gebruiker:docker logout myregistry.azurecr.io docker login myregistry.azurecr.io
ACR biedt momenteel geen ondersteuning voor het verwijderen van thuisreplicatie door de gebruikers. De tijdelijke oplossing is om het maken van de basisreplicatie op te nemen in de sjabloon, maar het maken ervan over te slaan door toe te voegen "condition": false zoals hieronder wordt weergegeven:
{
"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'))]"
]
},
Verificatie-informatie wordt niet opgegeven in de juiste indeling voor directe REST API-aanroepen
Er kan een fout InvalidAuthenticationInfo worden weergegeven, met name wanneer u het curl hulpprogramma gebruikt met de optie , -L --location (om omleidingen te volgen).
U kunt bijvoorbeeld de blob ophalen met curl behulp van de optie en -L basisverificatie:
curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest
kan het volgende antwoord geven:
<?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>
De hoofdoorzaak is dat sommige curl implementaties omleidingen volgen met headers uit de oorspronkelijke aanvraag.
Om het probleem op te lossen, moet u omleidingen handmatig volgen zonder de headers. Druk de antwoordheaders af met -D - de optie curl en extraheren: de Location header:
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
Waarom worden Azure Portal niet al mijn opslagplaatsen of tags weergegeven?
Als u de Microsoft Edge/IE-browser gebruikt, kunt u ten meeste 100 opslagplaatsen of tags zien. Als uw register meer dan 100 opslagplaatsen of tags heeft, raden we u aan de Firefox- of Chrome-browser te gebruiken om ze allemaal weer te geven.
Waarom kan de Azure Portal geen opslagplaatsen of tags ophalen?
De browser kan de aanvraag voor het ophalen van opslagplaatsen of tags mogelijk niet naar de server verzenden. Er kunnen verschillende redenen zijn, zoals:
- Gebrek aan netwerkconnectiviteit
- Firewall
- De portal gebruiken vanuit een openbaar netwerk voor een register dat alleen privétoegang toestaat
- Ad-blokkeringen
- DNS-fouten
Neem contact op met uw netwerkbeheerder of controleer uw netwerkconfiguratie en connectiviteit. Probeer uit te proberen met behulp van uw Azure CLI om te controleren of uw omgeving az acr check-health -n yourRegistry verbinding kan maken met de Container Registry. Daarnaast kunt u ook een incognito- of privésessie in uw browser proberen om verouderde browsercache of cookies te voorkomen.
Waarom mislukt mijn pull- of pushaanvraag met een niet-toegestaan bewerking?
Hier zijn enkele scenario's waarin bewerkingen mogelijk niet zijn toegestaan:
- Klassieke registers worden niet meer ondersteund. Voer een upgrade uit naar een ondersteunde servicelaag met az acr update of de Azure Portal.
- De afbeelding of opslagplaats is mogelijk vergrendeld, zodat deze niet kan worden verwijderd of bijgewerkt. U kunt de opdracht az acr show repository gebruiken om de huidige kenmerken weer te geven.
- Sommige bewerkingen zijn niet toegestaan als de afbeelding in quarantaine is. Meer informatie over quarantaine.
- Uw register heeft mogelijk de opslaglimiet bereikt.
Indeling van opslagplaats is ongeldig of wordt niet ondersteund
Als er een foutbericht wordt weergegeven, zoals 'niet-ondersteunde indeling van opslagplaats', 'ongeldige indeling' of 'de aangevraagde gegevens bestaan niet' bij het opgeven van een opslagplaatsnaam in opslagplaatsbewerkingen, controleert u de spelling en het geval van de naam. Geldige opslagplaatsnamen kunnen alleen kleine alfanumerieke tekens, punten, streepjes, onderstrepingstekens en slashes bevatten.
Zie Open Container Initiative Distribution Specification voor volledige naamgevingsregels voor opslagplaatsen.
Hoe kan ik http-traceringen op uw Windows?
Vereisten
- Het ontsleutelen van https in Fiddler inschakelen: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS
- Docker inschakelen voor het gebruik van een proxy via de Docker-gebruikersinterface: https://docs.docker.com/docker-for-windows/#proxies
- Zorg ervoor dat u dit terugdraait wanneer u klaar bent. Docker werkt niet als dit is ingeschakeld en Fiddler niet wordt uitgevoerd.
Windows-containers
Docker-proxy configureren naar 127.0.0.1:8888
Linux-containers
Zoek het IP-adres van de virtuele docker-VM-switch:
(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress
Configureer de Docker-proxy voor uitvoer van de vorige opdracht en poort 8888 (bijvoorbeeld 10.0.75.1:8888)
Taken
Hoe kan ik batchonderzeggen uitgevoerd?
Met de volgende opdrachten worden alle taken in het opgegeven register geannuleerd.
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 %
Hoe kan ik de map .git opnemen in de opdracht az acr build?
Als u een lokale bronmap door te geven aan de opdracht, wordt de map standaard uitgesloten van az acr build .git het geüploade pakket. U kunt een bestand .dockerignore maken met de volgende instelling. De opdracht wordt opdracht gegeven om alle bestanden onder .git in het geüploade pakket te herstellen.
!.git/**
Deze instelling is ook van toepassing op de az acr run opdracht .
Ondersteunt Tasks GitLab voor brontriggers?
GitLab wordt momenteel niet ondersteund voor brontriggers.
Welke beheerservice voor git-opslagplaatsen ondersteunt Tasks?
| Git-service | Broncontext | Handmatig bouwen | Automatisch bouwen via een commit-trigger |
|---|---|---|---|
| GitHub | https://github.com/user/myapp-repo.git#mybranch:myfolder |
Ja | Ja |
| Azure-opslagplaatsen | https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder |
Ja | Ja |
| GitLab | https://gitlab.com/user/myapp-repo.git#mybranch:myfolder |
Ja | Nee |
| BitBucket | https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder |
Ja | Nee |
Foutbericht uitvoeren Probleemoplossing
| Foutbericht | Handleiding voor het oplossen van problemen |
|---|---|
| Er is geen toegang geconfigureerd voor de VM, waardoor er geen abonnementen zijn gevonden | Dit kan gebeuren als u gebruikt az login --identity in uw ACR-taak. Dit is een tijdelijke fout en treedt op wanneer de roltoewijzing van uw beheerde identiteit niet is doorgegeven. Een paar seconden wachten voordat het opnieuw wordt gedaan, werkt. |
CI/CD-integratie
Volgende stappen
- Meer informatie over Azure Container Registry.