Vanliga frågor och svar – Azure Container Registry

Den här artikeln tar upp vanliga frågor och kända problem med Azure Container Registry.

Felsökningsvägledning för registret finns i:

Resurshantering

Kan jag skapa en Azure Container Registry med en Resource Manager mall?

Ja. Här är en mall som du kan använda för att skapa ett register.

Finns det säkerhetsriskgenomsökning efter avbildningar i ACR?

Ja. Se dokumentationen från Microsoft Defender för molnet,Variantlock och Aqua.

Hur gör jag för att konfigurera Kubernetes med Azure Container Registry?

Se dokumentationen för Kubernetes och stegen för att Azure Kubernetes Service.

Hur gör jag för att du administratörsautentiseringsuppgifter för ett containerregister?

Viktigt

Administratörsanvändarkontot är utformat för att en enskild användare ska kunna komma åt registret, främst i testsyfte. Vi rekommenderar inte att du delar autentiseringsuppgifterna för administratörskontot med flera användare. Enskilda identiteter rekommenderas för användare och tjänstens huvudnamn för scenarier utan huvudnamn. Se Översikt över autentisering.

Kontrollera att registrets administratörsanvändare är aktiverad innan du hämtar administratörsautentiseringsuppgifter.

Så här hämtar du autentiseringsuppgifter med hjälp av Azure CLI:

az acr credential show -n myRegistry

Använda Azure PowerShell:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Hur gör jag för att du administratörsautentiseringsuppgifter i en Resource Manager mall?

Viktigt

Administratörsanvändarkontot är utformat för att en enskild användare ska kunna komma åt registret, främst i testsyfte. Vi rekommenderar inte att du delar autentiseringsuppgifterna för administratörskontot med flera användare. Enskilda identiteter rekommenderas för användare och tjänstens huvudnamn för scenarier utan huvudnamn. Se Översikt över autentisering.

Kontrollera att registrets administratörsanvändare är aktiverad innan du hämtar administratörsautentiseringsuppgifter.

Så här hämtar du det första lösenordet:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

Så här hämtar du det andra lösenordet:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

Det går inte att ta bort replikeringen med statusen Förbjuden, men replikeringen tas bort med hjälp av Azure CLI eller Azure PowerShell

Felet visas när användaren har behörighet i ett register men inte har behörighet på läsarnivå för prenumerationen. Lös problemet genom att tilldela läsarbehörigheter för prenumerationen till användaren:

az role assignment create --role "Reader" --assignee user@contoso.com --scope /subscriptions/<subscription_id> 

Brandväggsreglerna har uppdaterats men de har inte effekt

Det tar lite tid att sprida ändringar i brandväggsregeln. När du har ändrat brandväggsinställningarna väntar du några minuter innan du verifierar ändringen.

Registeråtgärder

Hur gör jag för att åtkomst till Docker Registry HTTP API V2?

ACR stöder Docker Registry HTTP API V2. DU kan komma åt API:erna på https://<your registry login server>/v2/ . Exempel: https://mycontainerregistry.azurecr.io/v2/

Hur gör jag för att bort alla manifest som inte refereras till av någon tagg på en lagringsplats?

Om du använder bash:

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@%

För 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@$_ }

Anteckning

Du kan lägga till -y i borttagningskommandot för att hoppa över bekräftelsen.

Mer information finns i Ta bort containeravbildningar i Azure Container Registry.

Varför minskar inte kvoten för registret när avbildningar har tagits bort?

Den här situationen kan inträffa om de underliggande lagren fortfarande refereras av andra containeravbildningar. Om du tar bort en avbildning utan referenser uppdateras användningen av registret inom några minuter.

Hur gör jag för att att verifiera ändringar i lagringskvoten?

Skapa en avbildning med ett lager på 1 GB med hjälp av följande Docker-fil. Detta säkerställer att avbildningen har ett lager som inte delas av någon annan avbildning i registret.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Skapa och push-skicka avbildningen till registret med hjälp av Docker CLI.

docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest

Du bör kunna se att lagringsanvändningen har ökat i Azure Portal, eller så kan du köra frågor mot användningen med hjälp av CLI.

az acr show-usage -n myregistry

Ta bort avbildningen med Hjälp av Azure CLI eller portalen och kontrollera den uppdaterade användningen på några minuter.

az acr repository delete -n myregistry --image 1gb

Hur gör jag för att autentisera med mitt register när jag kör CLI i en container?

Du måste köra Azure CLI-containern genom att montera Docker-socketen:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

Installera i docker containern:

apk --update add docker

Autentisera sedan med ditt register:

az acr login -n MyRegistry

Hur aktiverar jag TLS 1.2?

Aktivera TLS 1.2 med valfri nyligen genomförd Docker-klient (version 18.03.0 och senare).

Viktigt

Från och med 13 januari 2020 Azure Container Registry alla säkra anslutningar från servrar och program att använda TLS 1.2. Stöd för TLS 1.0 och 1.1 kommer att dras tillbaka.

Stöder Azure Container Registry Content Trust?

Ja, du kan använda betrodda avbildningar Azure Container Registry, eftersom Docker Notary har integrerats och kan aktiveras. Mer information finns i Innehållsförtroende i Azure Container Registry.

Var finns filen för tumavtrycket?

Under ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata :

  • Offentliga nycklar och certifikat för alla roller (utom delegeringsroller) lagras i root.json .
  • Offentliga nycklar och certifikat för delegeringsrollen lagras i JSON-filen för dess överordnade roll (till targets.json exempel för targets/releases rollen).

Vi föreslår att du verifierar de offentliga nycklarna och certifikaten efter den övergripande TUF-verifieringen som utförs av Docker- och Notary-klienten.

Hur gör jag för att bevilja åtkomst till att hämta eller skicka avbildningar utan behörighet att hantera registerresursen?

ACR stöder anpassade roller som ger olika behörighetsnivåer. Mer specifikt AcrPull gör AcrPush rollerna att användare kan hämta och/eller push-skicka avbildningar utan behörighet att hantera registerresursen i Azure.

  • Azure Portal: Ditt register – > Access Control (IAM) – > Lägg till AcrPull (Välj eller för AcrPush rollen).

  • Azure CLI: Hitta resurs-ID:t för registret genom att köra följande kommando:

    az acr show -n myRegistry
    

    Sedan kan du tilldela AcrPull rollen eller till en användare AcrPush (i följande exempel används AcrPull ):

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

    Du kan också tilldela rollen till ett huvudnamn för tjänsten som identifieras av dess program-ID:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

Tilldelaren kan sedan autentisera och komma åt avbildningar i registret.

  • Så här autentiserar du till ett register:

    az acr login -n myRegistry 
    
  • Så här listar du lagringsplatsen:

    az acr repository list -n myRegistry
    
  • Så här hämtar du en avbildning:

    docker pull myregistry.azurecr.io/hello-world
    

Med bara rollen eller har tilldelaren inte behörighet att AcrPullAcrPush hantera registerresursen i Azure. Till exempel az acr list eller visar inte az acr show -n myRegistry registret.

Hur gör jag för att aktivera automatisk avbildnings sätta i karantän för ett register?

Avbildnings karantän är för närvarande en förhandsgranskningsfunktion i ACR. Du kan aktivera karantänläget för ett register så att endast de avbildningar som har klarat säkerhetsgenomsökningen är synliga för vanliga användare. Mer information finns i ACR GitHub repo.

Hur gör jag för att aktivera anonym hämtningsåtkomst?

Hur gör jag för att skicka icke-distributable lager till ett register?

Ett icke-distributable lager i ett manifest innehåller en URL-parameter som innehåll kan hämtas från. Några möjliga användningsfall för att aktivera icke-distributable layer push är för nätverksbegränsade register, air-gapped register med begränsad åtkomst eller för register utan Internetanslutning.

Om du till exempel har NSG-regler konfigurerade så att en virtuell dator endast kan hämta avbildningar från ditt Azure-containerregister, hämtar Docker fel för externa/icke-distributable lager. Till exempel skulle en Windows Server Core-avbildning innehålla referenser på främmande lager till Azure-containerregistret i manifestet och skulle inte kunna hämta i det här scenariot.

Så här aktiverar du push-av icke-distributable-lager:

  1. Redigera filen daemon.json som finns i på /etc/docker/ Linux-värdar och på C:\ProgramData\docker\config\daemon.json på Windows Server. Förutsatt att filen tidigare var tom lägger du till följande innehåll:

    {
      "allow-nondistributable-artifacts": ["myregistry.azurecr.io"]
    }
    

    Anteckning

    Värdet är en matris med registeradresser avgränsade med kommatecken.

  2. Spara och avsluta filen.

  3. Starta om Docker.

När du push-pushar avbildningar till registren i listan skickas deras icke distributable lager till registret.

Varning

Icke-distributable artefakter har vanligtvis begränsningar för hur och var de kan distribueras och delas. Använd endast den här funktionen för att skicka artefakter till privata register. Se till att du följer alla villkor som täcker omfördelning av icke-distributable artefakter.

Diagnostik- och hälsokontroller

Kontrollera hälsa med "az acr check-health"

Docker-pull misslyckas med felet: net/http: begäran avbröts i väntan på anslutning (Client.Timeout överskreds i väntan på huvuden)

  • Om det här felet är ett tillfälligt problem lyckas återförsöket.
  • Om docker pull misslyckas kontinuerligt kan det finnas ett problem med Docker-daemonen. Problemet kan vanligtvis åtgärdas genom att starta om Docker-daemonen.
  • Om problemet kvarstår när du har startat om Docker-daemonen kan problemet vara problem med nätverksanslutningen på datorn. Kontrollera om det allmänna nätverket på datorn är felfritt genom att köra följande kommando för att testa slutpunktsanslutningen. Den lägsta az acr version som innehåller det här anslutningskontrollkommandot är 2.2.9. Uppgradera Azure CLI om du använder en äldre version.
az acr check-health -n myRegistry
  • Du bör alltid ha en återförsöksmekanism för alla Docker-klientåtgärder.

Docker-pull är långsam

Använd det här verktyget för att testa datorns nedladdningshastighet för nätverket. Om datornätverket är långsamt bör du överväga att använda en virtuell Azure-dator i samma region som ditt register. Detta ger vanligtvis snabbare nätverkshastighet.

Docker-push är långsam

Använd det här verktyget för att testa datorns uppladdningshastighet i nätverket. Om datornätverket är långsamt bör du överväga att använda en virtuell Azure-dator i samma region som ditt register. Detta ger vanligtvis snabbare nätverkshastighet.

Docker-push lyckas men docker pull misslyckas med fel: obehörig: autentisering krävs

Det här felet kan inträffa med Red Hat-versionen av Docker-daemonen, --signature-verification där är aktiverat som standard. Du kan kontrollera Docker-daemonalternativen för Red Hat Enterprise Linux (RHEL) eller Fedora genom att köra följande kommando:

grep OPTIONS /etc/sysconfig/docker

Fedora 28 Server har till exempel följande docker-daemonalternativ:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Om --signature-verification=false det saknas misslyckas ett fel som liknar docker pull följande:

Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required

Så här löser du felet:

  1. Lägg till alternativet --signature-verification=false i Konfigurationsfilen för Docker-daemon. /etc/sysconfig/docker Till exempel:

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

  2. Starta om Docker-daemontjänsten genom att köra följande kommando:

    sudo systemctl restart docker.service
    

Information om --signature-verification finns genom att köra man dockerd .

az acr login succeeds but docker fails with error: unauthorized: authentication required

Se till att du använder en server-URL med endast gemener, till exempel , även om namnet på registerresursen är docker push myregistry.azurecr.io/myimage:latest versaler eller blandat, till exempel myRegistry .

Aktivera och hämta felsökningsloggarna för Docker-daemonen

Börja dockerd med debug alternativet . Skapa först Konfigurationsfilen för Docker-daemon ( ) om /etc/docker/daemon.json den inte finns och lägg till debug alternativet:

{    
    "debug": true    
}

Starta sedan om daemon. Till exempel med Ubuntu 14.04:

sudo service docker restart

Information finns i Docker-dokumentationen.

  • Loggarna kan genereras på olika platser, beroende på ditt system. För Ubuntu 14.04 är det till exempel /var/log/upstart/docker.log .
    Mer information finns i Docker-dokumentationen.

  • För Docker Windows genereras loggarna under %LOCALAPPDATA%/docker/. Den kanske dock inte innehåller all felsökningsinformation ännu.

    För att få åtkomst till den fullständiga daemonloggen kan du behöva några extra steg:

    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
    

    Nu har du åtkomst till alla filer på den virtuella dator som kör dockerd . Loggen finns på /var/log/docker.log .

Nya användarbehörigheter kanske inte börjar gälla omedelbart efter uppdateringen

När du beviljar nya behörigheter (nya roller) till ett huvudnamn för tjänsten kanske ändringen inte börjar gälla omedelbart. Det finns två möjliga orsaker:

  • Azure Active Directory fördröjd rolltilldelning. Normalt går det snabbt, men det kan ta några minuter på grund av spridningsfördröjningen.

  • Behörighetsfördröjning på ACR-tokenserver. Det kan ta upp till 10 minuter. Du kan åtgärda detta genom docker logout att autentisera igen med samma användare efter 1 minut:

    docker logout myregistry.azurecr.io
    docker login myregistry.azurecr.io
    

För närvarande stöder inte ACR borttagning av hemreplikering av användarna. Lösningen är att inkludera skapa hemreplikering i mallen men hoppa över skapandet genom att lägga till "condition": false enligt nedan:

{
    "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'))]"
     ]
},

Autentiseringsinformation anges inte i rätt format för direkt REST API anrop

Du kan stöta på InvalidAuthenticationInfo ett fel, särskilt när curl du använder verktyget med alternativet , -L--location (för att följa omdirigeringar). Du kan till exempel hämta bloben med curl hjälp av med alternativ och grundläggande -L autentisering:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

kan resultera i följande svar:

<?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>

Rotorsaken är att vissa curl implementeringar följer omdirigeringar med rubriker från den ursprungliga begäran.

För att lösa problemet måste du följa omdirigeringar manuellt utan rubrikerna. Skriv ut svarshuvudena -D - med alternativet och extrahera curl sedan: Location sidhuvudet:

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

Varför visar Azure Portal inte alla mina lagringsplatsen eller taggar?

Om du använder webbläsaren Microsoft Edge/IE kan du se högst 100 databaser eller taggar. Om registret har fler än 100 lagringsplatsen eller taggar rekommenderar vi att du använder webbläsaren Firefox eller Chrome för att visa en lista över alla.

Varför kan Azure Portal inte hämta lagringsplatsen eller taggar?

Webbläsaren kanske inte kan skicka begäran om att hämta lagringsplatsen eller taggar till servern. Det kan finnas olika orsaker, till exempel:

  • Brist på nätverksanslutning
  • Brandvägg
  • Använda portalen från ett offentligt nätverk för ett register som endast tillåter privat åtkomst
  • Annonsblockerare
  • DNS-fel

Kontakta nätverksadministratören eller kontrollera nätverkskonfigurationen och anslutningen. Prova att az acr check-health -n yourRegistry köra med Hjälp av Azure CLI för att kontrollera om din miljö kan ansluta till Container Registry. Du kan också prova en inkognitosession eller privat session i webbläsaren för att undvika inaktuella webbläsarcacheminnen eller cookies.

Varför misslyckas min pull- eller push-begäran med otillåten åtgärd?

Här är några scenarier där åtgärder inte tillåts:

  • Klassiska register stöds inte längre. Uppgradera till en tjänstnivå som stöds med hjälp av az acr update eller Azure Portal.
  • Avbildningen eller lagringsplatsen kan låsas så att den inte kan tas bort eller uppdateras. Du kan använda kommandot az acr show repository för att visa aktuella attribut.
  • Vissa åtgärder tillåts inte om avbildningen är i karantän. Läs mer om karantän.
  • Registret kan ha nått sin lagringsgräns.

Lagringsplatsens format är ogiltigt eller stöds inte

Om du ser ett fel som "lagringsformat som inte stöds", "ogiltigt format" eller "begärda data finns inte" när du anger ett lagringsplatsnamn i lagringsplatsåtgärder kontrollerar du stavningen och ärendet för namnet. Giltiga lagringsplatsnamn får bara innehålla gemena alfanumeriska tecken, punkter, bindestreck, understreck och snedstreck.

Fullständiga namngivningsregler för lagringsplatsen finns i Open Container Initiative Distribution Specification.

Hur gör jag för att samla in HTTP-spårningar Windows?

Förutsättningar

Windows-containrar

Konfigurera Docker-proxy till 127.0.0.1:8888

Linux-containrar

Hitta IP-adressen för den virtuella Docker vm-växeln:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Konfigurera Docker-proxyn till utdata från föregående kommando och port 8888 (till exempel 10.0.75.1:8888)

Uppgifter

Hur gör jag för att batch cancel-körningar?

Följande kommandon avbryter alla aktiviteter som körs i det angivna registret.

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 %

Hur gör jag för att .git-mappen i kommandot az acr build?

Om du skickar en lokal källmapp till az acr build kommandot .git undantas mappen från det uppladdade paketet som standard. Du kan skapa .dockerignore en fil med följande inställning. Den beordrar kommandot att återställa alla filer under .git i det uppladdade paketet.

!.git/**

Den här inställningen gäller även för az acr run kommandot .

Stöder tasks GitLab för källutlösare?

Vi stöder för närvarande inte GitLab för källutlösare.

Vilken git-lagringsplatshanteringstjänst stöder Tasks?

Git-tjänst Källkontext Manuell version Skapa automatiskt via commit-utlösare
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder Ja Ja
Azure-lagringsplatser https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Ja Ja
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder Ja Inga
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Ja Inga

Felsökning av körningsfelmeddelande

Felmeddelande Felsökningsguide
Ingen åtkomst har konfigurerats för den virtuella datorn, och därför hittades inga prenumerationer Detta kan inträffa om du använder az login --identity i din ACR-uppgift. Det här är ett tillfälligt fel som inträffar när rolltilldelningen för din hanterade identitet inte har spridits. Väntar några sekunder innan återförsöket fungerar.

CI/CD-integrering

Nästa steg