In dit artikel worden veelgestelde vragen en bekende problemen over Azure Container Registry behandeld.
Zie voor richtlijnen voor het oplossen van problemen met het register:
Resourcebeheer
Kan ik een Azure Container Registry (ACR) maken met behulp van een ARM-sjabloon (Azure Resource Manager) ?
Ja. Hier volgt een sjabloon die u kunt gebruiken om een register te maken.
Is er scannen op beveiligingsproblemen op installatiekopieën in ACR?
Ja. Zie de documentatie van Microsoft Defender voor Cloud, Twistlock en Aqua.
Hoe kan ik Kubernetes configureren met Azure Container Registry?
Raadpleeg de documentatie voor Kubernetes en stappen voor Azure Kubernetes Service.
Hoe kan ik beheerdersreferenties voor een containerregister ophalen?
Belangrijk
Het gebruikersaccount van de beheerder is ontworpen voor één gebruiker voor toegang tot het register, voornamelijk voor testdoeleinden. Het is niet raadzaam om de referenties van het beheerdersaccount met meerdere gebruikers te delen. Afzonderlijke identiteit wordt aanbevolen voor gebruikers en service-principals voor hoofdloze scenario's. Zie verificatieoverzicht.
Voordat u beheerdersreferenties ophaalt, moet u ervoor zorgen dat de beheerdergebruiker van het register is ingeschakeld.
Referenties ophalen 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 ophalen in een Resource Manager-sjabloon?
Belangrijk
Het gebruikersaccount van de beheerder is ontworpen voor één gebruiker voor toegang tot het register, voornamelijk voor testdoeleinden. Het is niet raadzaam om de referenties van het beheerdersaccount met meerdere gebruikers te delen. Afzonderlijke identiteit wordt aanbevolen voor gebruikers en service-principals voor hoofdloze scenario's. Zie verificatieoverzicht.
Voordat u beheerdersreferenties ophaalt, moet u ervoor zorgen dat de beheerdergebruiker van het register is ingeschakeld.
Het eerste wachtwoord ophalen:
{
"password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}
Het tweede wachtwoord ophalen:
{
"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
Deze fout treedt op wanneer een gebruiker de Container Registry Contributor and Data Access Configuration Administrator
rol heeft in een register, waardoor replicaverwijdering via Azure CLI is toegestaan, maar geen lezermachtigingen heeft voor het abonnement. Toegang tot de lezer op het abonnement is vereist om replica's via de portal te verwijderen. U kunt dit probleem oplossen door leesmachtigingen 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 worden niet van kracht
Het duurt enige tijd om wijzigingen in firewallregels door te geven. Nadat u de firewallinstellingen hebt gewijzigd, wacht u enkele minuten voordat u deze wijziging controleert.
Registerbewerkingen
Hoe kan ik toegang tot Docker Registry HTTP API V2?
ACR ondersteunt Docker Registry HTTP API V2. De API's zijn toegankelijk op https://<your registry login server>/v2/
. Voorbeeld: https://mycontainerregistry.azurecr.io/v2/
Hoe kunnen alle manifesten waarnaar niet wordt verwezen door een tag in een repository worden verwijderd?
Als je op bash bent:
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@%
Voor 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@$_ }
Notitie
U kunt de opdracht Verwijderen toevoegen -y
om bevestiging over te slaan.
Zie Containerinstallatiekopieën verwijderen in Azure Container Registry voor meer informatie.
Waarom vermindert het quotumgebruik van het register niet na het verwijderen van installatiekopieën?
Deze situatie kan zich voordoen als er nog steeds naar de onderliggende lagen wordt verwezen door andere containerafbeeldingen. Als u een installatiekopieën zonder verwijzingen verwijdert, wordt het registergebruik over een paar minuten bijgewerkt.
Hoe kan ik opslagquotumwijzigingen valideren?
Maak een installatiekopieën met een laag van 1 GB met behulp van het volgende Docker-bestand. Deze stap zorgt ervoor dat de afbeelding een laag heeft die niet wordt gedeeld met 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 en push de installatiekopieën naar uw 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 in Azure Portal is toegenomen of dat u query's kunt uitvoeren met behulp van de CLI.
az acr show-usage -n myregistry
Verwijder de installatiekopieën met behulp van de Azure CLI of portal en controleer het bijgewerkte gebruik over een paar minuten.
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 koppelen:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev
Installeer het volgende docker
in de container:
apk --update add docker
Verifieer 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 is buiten gebruik gesteld.
Biedt Azure Container Registry ondersteuning voor Content Trust?
Ja, u kunt vertrouwde installatiekopieën gebruiken in Azure Container Registry met Docker Content Trust. Zie Content Trust in Azure Container Registry voor meer informatie.
Waar bevindt het bestand zich voor de vingerafdruk?
Onder ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata
:
- Openbare sleutels en certificaten van alle rollen (behalve delegatierollen) worden opgeslagen in de
root.json
. - Openbare sleutels en certificaten van de delegatierol worden opgeslagen in het JSON-bestand van de bovenliggende rol (bijvoorbeeld
targets.json
voor detargets/releases
rol).
U moet deze openbare sleutels en certificaten verifiëren na de algehele TUF-verificatie die is uitgevoerd door de Docker- en notarisclient.
Hoe verleen ik toegang tot pull- of push-afbeeldingen zonder machtigingen te verlenen voor het beheren van de registerbron?
ACR ondersteunt Microsoft Entra-rollen, toegangsbeheer (RBAC) en ingebouwde rollen die verschillende niveaus van Microsoft Entra-machtigingen bieden, zoals het verlenen van push- of pull-machtigingen voor afbeeldingen zonder machtigingen te verlenen aan het hele register.
U kunt desgewenst [Microsoft Entra-toegangsbeheer (ABAC) op basis van attributen] gebruiken om op Microsoft Entra gebaseerde opslagplaatsmachtigingen en bereikroltoewijzingen aan specifieke opslagplaatsen te beheren.
Hoe kan ik automatische installatiekopieënquarantaine inschakelen voor een register?
Quarantaine van afbeeldingen is momenteel een preview-functie van ACR. De quarantainemodus van een register kan worden ingeschakeld, zodat alleen afbeeldingen die door de beveiligingsscans komen, zichtbaar zijn voor normale gebruikers. Zie de ACR GitHub-opslagplaats 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 waaruit de inhoud kan worden opgehaald. Enkele mogelijke gebruiksscenario's voor het inschakelen van niet-distribueerbare laagpushes zijn voor registers met netwerkbeperkingen, air-gapped registers met beperkte toegang of voor registers zonder internetverbinding.
Als u bijvoorbeeld NSG-regels (Network Security Group) hebt ingesteld zodat een VM alleen installatiekopieën uit uw Azure-containerregister kan ophalen, zal Docker fouten tegenkomen bij het ophalen van vreemde of niet-distribueerbare lagen. Een Windows Server Core-installatiekopie bevat bijvoorbeeld verwijzingen naar refererende lagen naar het Azure-containerregister in het manifest en kan dit scenario niet ophalen.
Om het duwen van niet-distribueerbare lagen mogelijk te maken:
Bewerk het
daemon.json
bestand, dat zich op/etc/docker/
Linux-hosts en opC:\ProgramData\docker\config\daemon.json
Windows Server bevindt. 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 van 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 gepusht.
Waarschuwing
Niet-distribueerbare artefacten hebben doorgaans beperkingen op 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 herdistribueren van niet-distribueerbare artefacten.
Diagnostische en statuscontroles
Status controleren met az acr check-health
Zie De status van een Azure-containerregister controleren om veelvoorkomende omgevings- en registerproblemen op te lossen.
Docker-pull mislukt met fout: net/http: aanvraag geannuleerd tijdens wachten op verbinding (Client.Timeout overschreden tijdens wachten op headers)
- Als deze fout een tijdelijk probleem is, kan het opnieuw proberen.
- Als
docker pull
dit continu mislukt, kan er een probleem zijn met de Docker-daemon. Het probleem kan over het algemeen worden verholpen door de Docker-daemon opnieuw op te starten. - Als u dit probleem blijft zien nadat u Docker-daemon opnieuw hebt opgestart, kan het probleem enkele problemen met de netwerkverbinding met de computer zijn. Als u wilt controleren of het algemene netwerk op de computer in orde is, voert u de volgende opdracht uit om de connectiviteit van het eindpunt te testen. De minimale
az acr
versie die deze connectiviteitscontroleopdracht bevat, is 2.2.9. Upgrade uw Azure CLI als u een oudere versie gebruikt.
az acr check-health -n myRegistry
- U moet altijd een mechanisme voor opnieuw proberen hebben voor alle Docker-clientbewerkingen.
Docker pull is traag
Gebruik het snelheidsprogramma om de downloadsnelheid van uw computernetwerk te testen. Als het machinenetwerk traag is, kunt u overwegen een virtuele Azure-machine (VM) te gebruiken in dezelfde regio als uw register om de netwerksnelheid te verbeteren.
Docker-push is traag
Gebruik het snelheidsprogramma om de uploadsnelheid van uw computernetwerk te testen. Als het computernetwerk traag is, kunt u overwegen om azure-VM in dezelfde regio als uw register te gebruiken om de netwerksnelheid te verbeteren.
Docker-push slaagt, maar docker-pull mislukt met de volgende fout: niet geautoriseerd: verificatie vereist
Deze fout kan optreden met de Red Hat-versie van de Docker-daemon, waarbij --signature-verification
deze 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 docker daemon-opties:
OPTIONS='--selinux-enabled --log-driver=journald --live-restore'
Als --signature-verification=false
deze ontbreekt, docker pull
mislukt het met een fout die vergelijkbaar is met:
Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required
Los deze fout als volgt op:
Voeg de optie
--signature-verification=false
toe aan het configuratiebestand/etc/sysconfig/docker
van de Docker-daemon. Voorbeeld: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
kunt u vinden door uit te voeren man dockerd
.
az acr login succeeds but docker fail with error: unauthorized: authentication required
Zorg ervoor dat u een url van alle kleine letters van de server gebruikt, bijvoorbeeld, docker push myregistry.azurecr.io/myimage:latest
zelfs als de naam van de registerresource hoofdletters of gemengde hoofdletters is, zoals myRegistry
.
De foutopsporingslogboeken van de Docker-daemon inschakelen en ophalen
Begin dockerd
met de debug
optie. Maak eerst het Docker-daemon-configuratiebestand (/etc/docker/daemon.json
) als dit niet bestaat en voeg de debug
optie toe:
{
"debug": true
}
Start vervolgens de daemon opnieuw.
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 het
/var/log/upstart/docker.log
bijvoorbeeld .
Raadpleeg de Docker-documentatie voor meer informatie.Voor Docker voor Windows worden de logboeken gegenereerd onder %LOCALAPPDATA%/docker/. Het kan echter nog niet alle foutopsporingsgegevens bevatten.
Als u toegang wilt krijgen tot het volledige daemon-logboek, hebt u mogelijk enkele 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 /host
U hebt nu toegang tot alle bestanden van de vm die wordt uitgevoerd
dockerd
. Het logboek bevindt zich 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 van kracht. Er zijn twee mogelijke redenen:
Vertraging in roltoewijzing van Microsoft Entra. Normaal gesproken is het snel, maar het kan minuten duren vanwege de doorgiftevertraging.
Het kan tot 10 minuten duren voordat de machtigingsvertraging op de ACR-tokenserver duurt. U kunt
docker logout
dit beperken door na 1 minuut opnieuw te verifiëren met dezelfde gebruiker:docker logout myregistry.azurecr.io docker login myregistry.azurecr.io
Op dit moment biedt ACR geen ondersteuning voor het verwijderen van thuisreplicatie door de gebruikers. De tijdelijke oplossing is om het maken van de basisreplicatie in de sjabloon op te nemen, 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'))]"
]
},
Verificatiegegevens worden niet in de juiste indeling gegeven voor directe REST API-aanroepen
Er kan een InvalidAuthenticationInfo
fout optreden, met name het gebruik van het curl
hulpprogramma met de optie -L
( --location
om omleidingen te volgen).
Bijvoorbeeld het ophalen van de blob met curl
behulp van -L
optie en basisverificatie:
curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest
kan resulteren in het volgende antwoord:
<?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 van de oorspronkelijke aanvraag.
Als u het probleem wilt oplossen, moet u de omleidingen handmatig volgen zonder de headers. Druk de antwoordheaders af met de -D -
optie van curl
en pak deze vervolgens uit: de Location
koptekst:
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 vermeldt Azure Portal niet alle opslagplaatsen of tags?
Als u de Microsoft Edge/IE-browser gebruikt, kunt u maximaal 100 opslagplaatsen of tags zien. Als uw register meer dan 100 opslagplaatsen of tags bevat, raden we u aan om firefox of Chrome te gebruiken om ze allemaal weer te geven.
Waarom kan azure Portal geen opslagplaatsen of tags ophalen?
Mogelijk kan de browser de aanvraag voor het ophalen van opslagplaatsen of tags niet verzenden naar de server. Er kunnen verschillende redenen zijn, zoals:
- Gebrek aan netwerkconnectiviteit
- Brandmuur
- De portal gebruiken vanuit een openbaar netwerk voor een register dat alleen privétoegang toestaat
- Advertentieblokkeringen
- DNS-fouten (Domain Name Server)
Neem contact op met uw netwerkbeheerder of controleer uw netwerkconfiguratie en connectiviteit. Voer de Azure CLI uit az acr check-health -n yourRegistry
om te controleren of uw omgeving verbinding kan maken met het 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 niet-toegestane bewerkingen?
Hier volgen enkele scenario's waarbij bewerkingen mogelijk niet zijn toegestaan:
- Klassieke registers worden niet meer ondersteund. Upgrade naar een ondersteunde servicelaag met behulp van az acr update of de Azure Portal.
- De installatiekopieën of opslagplaatsen zijn mogelijk vergrendeld, zodat deze niet kunnen worden verwijderd of bijgewerkt. U kunt de opdracht az acr repository show gebruiken om de huidige kenmerken weer te geven.
- Sommige bewerkingen zijn niet toegestaan als de installatiekopieën in quarantaine zijn. Meer informatie over quarantaine.
- Het register heeft mogelijk de opslaglimiet bereikt.
Indeling van opslagplaats is ongeldig of niet ondersteund
Als u een fout ziet zoals 'niet-ondersteunde opslagplaatsindeling', 'ongeldige indeling' of 'de gevraagde gegevens bestaan niet' bij het opgeven van de naam van een opslagplaats in archiefbewerkingen, controleert u de spelling en het hoofdlettergebruik van de naam. Geldige namen van opslagplaatsen kunnen alleen alfanumerieke tekens in kleine letters, punten, streepjes, onderstrepingstekens en slashes bevatten.
Hoe kan ik http-traceringen verzamelen in Windows?
Vereisten
- Https ontsleutelen inSchakelen in Fiddler
- Schakel Docker in om een proxy te gebruiken via de Docker-gebruikersinterface.
- Vergeet niet om terug te keren wanneer u klaar bent. Docker werkt niet als dit is ingeschakeld en Fiddler niet actief is.
Windows-containers
Docker-proxy configureren op 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)
Opdrachten
Hoe kan ik batchuitvoeringen annuleren?
Met de volgende opdrachten worden alle actieve 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 az acr build command?
Als u een lokale bronmap doorgeeft aan de az acr build
opdracht, wordt de .git
map standaard uitgesloten van het geüploade pakket. U kunt een .dockerignore
bestand maken met de volgende instelling. Hiermee wordt de opdracht voor het herstellen van alle bestanden in .git
het geüploade pakket aangegeven.
!.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 | Handmatige build | Automatisch bouwen via doorvoertrigger |
---|---|---|---|
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 | Nr. |
BitBucket | https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder |
Ja | Nr. |
Probleemoplossing voor het uitvoeren van foutberichten
Foutmelding | Guide voor probleemoplossing |
---|---|
Er is geen toegang geconfigureerd voor de virtuele machine, waardoor er geen abonnementen zijn gevonden | Dit kan gebeuren als u deze gebruikt az login --identity in uw ACR-taak. Deze fout is van voorbijgaande aard en treedt op wanneer de roltoewijzing van uw beheerde identiteit nog niet is doorgegeven. Wacht een paar seconden voordat het opnieuw proberen werkt. |
CI/CD-integratie
Hoe kunt u dit oplossen als het maken van de agentenpool mislukt vanwege time-outproblemen?
Stel de juiste firewallregels in voor de bestaande netwerkbeveiligingsgroepen of door de gebruiker gedefinieerde routes. Wacht na de installatie enkele minuten totdat de firewallregels zijn toegepast.
Hoe schakelt u het ingebouwde Azure-beleid voor ACR-blokken in om beheerdersreferenties in te schakelen?
Het volgende door Azure gebouwde beleid, wanneer ingesteld op de respectieve beleidsstatus, blokkeert gebruikers van het inschakelen van admin user in hun register.
Ingebouwd Azure-beleid | Beleidsstatus | Beheerstatus |
---|---|---|
Configureer containerregisters om het lokale beheerdersaccount uit te schakelen. | Wijzigen | Uitschakelen |
Containerregisters moeten het lokale beheerdersaccount hebben uitgeschakeld. | Weigeren | Uitschakelen |
Containerregisters moeten het lokale beheerdersaccount hebben uitgeschakeld. | Controle | niet-compatibel |
Volgende stappen
- Meer informatie over Azure Container Registry.