Redigera

Dela via


Vanliga frågor och svar – Azure Container Registry

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

Information om felsökning av register finns i:

Resurshantering

Kan jag skapa ett Azure Container Registry med hjälp av 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 bilder i ACR?

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

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

Se dokumentationen för Kubernetes och steg för Azure Kubernetes Service.

Hur gör jag för att hämta administratörsautentiseringsuppgifter för ett containerregister?

Viktigt!

Administratörsanvändarkontot är utformat för att en enskild användare ska få åtkomst till registret, främst i testsyfte. Vi rekommenderar inte att du delar administratörskontots autentiseringsuppgifter med flera användare. Individuell identitet rekommenderas för användare och tjänstens huvudnamn för huvudlösa scenarier. Se Översikt över autentisering.

Innan du hämtar administratörsautentiseringsuppgifter kontrollerar du att registrets administratörsanvändare är aktiverad.

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 hämta administratörsautentiseringsuppgifter i en Resource Manager-mall?

Viktigt!

Administratörsanvändarkontot är utformat för att en enskild användare ska få åtkomst till registret, främst i testsyfte. Vi rekommenderar inte att du delar administratörskontots autentiseringsuppgifter med flera användare. Individuell identitet rekommenderas för användare och tjänstens huvudnamn för huvudlösa scenarier. Se Översikt över autentisering.

Innan du hämtar administratörsautentiseringsuppgifter kontrollerar du att registrets administratörsanvändare är aktiverad.

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, även om replikeringen tas bort med hjälp av Azure CLI eller Azure PowerShell

Felet visas när användaren har behörigheter i ett register men inte har behörigheter på läsarnivå för prenumerationen. Lös problemet genom att tilldela läsare behö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 börjar inte gälla

Det tar lite tid att sprida brandväggsregeländringar. När du har ändrat brandväggsinställningarna väntar du några minuter innan du verifierar den här ä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. API:erna kan nås på https://<your registry login server>/v2/. Exempel: https://mycontainerregistry.azurecr.io/v2/

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

Om du är på 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@%

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

Kommentar

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 registerkvotanvändningen efter borttagning av avbildningar?

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 registeranvändningen om några minuter.

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

Skapa en avbildning med ett 1 GB lager 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-överför avbildningen till registret med 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-portalen, 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 du 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

I containern installerar du docker:

apk --update add docker

Autentisera sedan med registret:

az acr login -n MyRegistry

Så här aktiverar du TLS 1.2?

Aktivera TLS 1.2 med hjälp av alla senaste Docker-klienter (version 18.03.0 och senare).

Viktigt!

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

Stödjer Azure Container Registry innehållsförtroende?

Ja, du kan använda betrodda avbildningar i 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 exempel targets.json för targets/releases rollen).

Vi föreslår att du verifierar dessa offentliga nycklar och certifikat efter den övergripande TUF-verifieringen som utförts av Docker- och Notary-klienten.

Hur gör jag för att bevilja åtkomst till pull- eller push-avbildningar utan behörighet att hantera registerresursen?

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

  • Azure-portalen: Ditt register –> Åtkomstkontroll (IAM) –> Lägg till (Välj AcrPull eller AcrPush för 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 AcrPush till en användare (i följande exempel används AcrPull):

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

    Eller 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
    

Tilldelningsobjektet 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 lagringsplatser:

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

    docker pull myregistry.azurecr.io/hello-world
    

Med endast AcrPull rollen eller AcrPush har den tilldelade inte behörighet att hantera registerresursen i Azure. Till exempel, az acr list eller az acr show -n myRegistry visar inte registret.

Hur gör jag för att aktivera automatisk avbildningskarantän för ett register?

Bildkarantän är för närvarande en förhandsversionsfunktion 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 normala användare. Mer information finns i ACR GitHub-lagringsplatsen.

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

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

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

Om du till exempel har konfigurerat NSG-regler så att en virtuell dator endast kan hämta avbildningar från ditt Azure-containerregister, hämtar Docker fel för lager som inte kan distribueras. En Windows Server Core-avbildning skulle till exempel innehålla referenser på främmande lager till Azure-containerregistret i manifestet och skulle misslyckas med att hämta i det här scenariot.

Så här aktiverar du push-överföring av icke-distribuerbara lager:

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

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

    Kommentar

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

  2. Spara och avsluta filen.

  3. Starta om Docker.

När du skickar avbildningar till registren i listan skickas deras icke-distribuerbara lager till registret.

Varning

Icke-distribuerbara 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 omfattar omdistribuering av ej distribuerbara artefakter.

Diagnostik och hälsokontroller

Kontrollera hälsotillståndet med "az acr check-health"

Information om hur du felsöker vanliga miljö- och registerproblem finns i Kontrollera hälsotillståndet för ett Azure-containerregister.

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

  • Om det här felet är ett tillfälligt problem kommer ett nytt försök att lyckas.
  • Om docker pull misslyckas kontinuerligt kan det uppstå ett problem med Docker-daemonen. Problemet kan vanligtvis åtgärdas genom att docker-daemonen startas om.
  • Om du fortsätter att se det här problemet när du har startat om Docker-daemon kan problemet vara några problem med nätverksanslutningen med 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 versionen 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 hastighetsverktyget för att testa nedladdningshastigheten för datorns nätverk. Om datornätverket är långsamt kan du överväga att använda virtuella Azure-datorer i samma region som registret för att förbättra nätverkshastigheten.

Docker-push är långsam

Använd hastighetsverktyget för att testa datorns nätverksuppladdningshastighet. Om datornätverket är långsamt kan du överväga att använda virtuella Azure-datorer i samma region som registret för att förbättra nätverkshastigheten.

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

Det här felet kan inträffa med Red Hat-versionen av Docker-daemon, där --signature-verification ä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 daemon-alternativ:

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

Med --signature-verification=false saknas misslyckas docker pull med ett fel som liknar:

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

Så här åtgärdar du felet:

  1. Lägg till alternativet --signature-verification=false i Docker-daemonkonfigurationsfilen /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 kan hittas genom att köra man dockerd.

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

Kontrollera att du använder en url för alla gemener, docker push myregistry.azurecr.io/myimage:latesttill exempel , även om registrets resursnamn är versaler eller blandade skiftlägen, till exempel myRegistry.

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

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

{    
    "debug": true    
}

Starta sedan om daemonen. 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 /var/log/upstart/docker.logdet till exempel .
    Mer information finns i Docker-dokumentationen .

  • För Docker för 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 datorn som kör dockerd. Loggen är på /var/log/docker.log.

Nya användarbehörigheter kanske inte gäller omedelbart efter uppdatering

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:

  • Microsoft Entra-rolltilldelningsfördröjning. Normalt är det snabbt, men det kan ta några minuter på grund av spridningsfördröjning.

  • Behörighetsfördröjning på ACR-tokenservern kan ta upp till 10 minuter. För att minimera kan docker logout du och sedan autentisera igen med samma användare efter 1 minut:

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

ACR stöder för närvarande inte borttagning av hemreplikering av användarna. Lösningen är att inkludera startreplikeringen i mallen, men hoppa över att den skapas 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 direkta REST API-anrop

Du kan stöta på ett InvalidAuthenticationInfo fel, särskilt med hjälp av curl verktyget med alternativet -L, --location (för att följa omdirigeringar). Till exempel hämtar du bloben med -L hjälp av curl alternativet och grundläggande 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 omdirigeringarna manuellt utan rubrikerna. Skriv ut svarshuvudena med alternativet -D -curl och extrahera sedan: Location rubriken:

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 listar inte Azure-portalen alla mina lagringsplatser eller taggar?

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

Varför går det inte att hämta lagringsplatser eller taggar i Azure-portalen?

Webbläsaren kanske inte kan skicka begäran om att hämta lagringsplatser 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 köra az acr check-health -n yourRegistry med Azure CLI för att kontrollera om din miljö kan ansluta till Container Registry. Dessutom kan du prova en inkognitosession eller en privat session i webbläsaren för att undvika inaktuell webbläsarcache eller cookies.

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

Här följer några scenarier där åtgärder kan vara otillåtna:

  • Klassiska register stöds inte längre. Uppgradera till en tjänstnivå som stöds med az acr update eller Azure-portalen.
  • Avbildningen eller lagringsplatsen kanske är låst så att den inte kan tas bort eller uppdateras. Du kan använda kommandot az acr repository show 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 "lagringsplatsformat som inte stöds", "ogiltigt format" eller "de begärda data finns inte" när du anger ett lagringsplatsnamn i lagringsplatsen kontrollerar du namnets stavning och skiftläge. Giltiga lagringsplatsnamn kan bara innehålla alfanumeriska gemener, punkter, bindestreck, understreck och snedstreck.

Hur gör jag för att samla in http-spårningar i 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 avbryta 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 inkludera .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 en .dockerignore fil med följande inställning. Kommandot uppmanas 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 Uppgifter GitLab för källutlösare?

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

Vilken tjänst för hantering av git-lagringsplatser stöder uppgifter?

Git-tjänst Källkontext Manuell version Automatisk kompilering via incheckningsutlö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 Nej
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Ja Nej

Felsöka körningsfel

Felmeddelande Felsökningsguide
Ingen åtkomst har konfigurerats för den virtuella datorn, 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 och inträffar när rolltilldelningen av din hanterade identitet inte har spridits. Det går att vänta några sekunder innan du försöker igen.

CI/CD-integrering

Hur löser jag om det inte går att skapa agentpoolen på grund av tidsgränsproblem?

Konfigurera rätt brandväggsregler för befintliga nätverkssäkerhetsgrupper eller användardefinierade vägar. Efter installationen väntar du några minuter på att brandväggsreglerna ska gälla.

Hur aktiverar du den inbyggda Azure-principen för ACR-block som aktiverar administratörsautentiseringsuppgifter?

Följande inbyggda Azure-princip, när den anges till respektive principstatus, blockerar användaren från att aktivera administratörsanvändare i registret.

Inbyggd Azure-princip Principstatus Administratörsstatus
Konfigurera containerregister för att inaktivera det lokala administratörskontot. Ändra Disable
Containerregister bör ha ett lokalt administratörskonto inaktiverat. Neka Disable
Containerregister bör ha ett lokalt administratörskonto inaktiverat. Audit (Granska) inkompatibel

Nästa steg