Veelgestelde vragen - Azure Container Registry

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.json voor de targets/releases rol).

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 AcrPull AcrPush of voor de rol).

  • Azure CLI: zoek de resource-id van het register door de volgende opdracht uit te voeren:

    az acr show -n myRegistry
    

    Vervolgens kunt u de rol AcrPull of toewijzen aan een gebruiker AcrPush (in het volgende voorbeeld wordt AcrPull gebruikt):

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    Of 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 myRegistry 
    
  • Opslagplaatsen op een lijst zetten:

    az acr repository list -n myRegistry
    
  • Een 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:

  1. Bewerk daemon.json het bestand, dat zich in bevindt /etc/docker/ op Linux-hosts en op C:\ProgramData\docker\config\daemon.json Windows 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.

  2. Sla het bestand op en sluit het af.

  3. 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 pull er 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 acr versie 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:

  1. Voeg de optie toe aan het configuratiebestand van de --signature-verification=false Docker-daemon. /etc/sysconfig/docker Bijvoorbeeld:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. 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 /host
    

    U 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 logout bij 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

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