Redigera

Dela via


Vanliga frågor och svar – Azure Container Registry på Azure Stack Hub

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 på Azure Stack Hub 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. Den här mallen är avsedd för det offentliga Azure-molnet. Om du vill använda den här mallen mot Azure Stack Hub ändrar du API-versionen till 2019-05-01, annars kan den inte distribueras.

Finns det säkerhetsrisksökning efter avbildningar i Azure Container Registry på Azure Stack Hub?

Nej. Det finns för närvarande ingen integrering med Azure Security Center för register som distribuerats på Azure Stack Hub. Det finns alternativ för tredje part och öppen källkod som kan utnyttjas för att fylla detta behov för anslutna eller frånkopplade Azure Stack Hub-distributioner.

Hur konfigurerar jag Kubernetes med Azure Container Registry?

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

Hur hämtar jag 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 hämtar jag 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]"
}

Hur skickar jag en containeravbildning i Azure Container Registry till en frånkopplad Azure Stack Hub-distribution som kör Kubernetes?

Du kan utföra en maskin-till-dator-avbildningsöverföring över ett lokalt nätverk från en dator som redan har de nödvändiga containeravbildningarna. Så här gör du:

  1. Hämta först de nödvändiga containeravbildningarna med hjälp av en dator med Internetanslutning med hjälp av kommandot docker CLI och docker pull. Mer information finns i Importera containeravbildningar till ett containerregister .

  2. När du har importerat de nödvändiga avbildningarna transporterar du datorn till platsen för den frånkopplade Azure Hub-instansen.

  3. Använd docker-taggen och docker push-kommandona för att tagga och skicka avbildningen till det lokala Azure Container Registry på Azure Stack Hub-lagringsplatsen.

Registeråtgärder

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

Azure Container Registry stöder Docker Registry HTTP API V2. API:erna kan nås på https://<your registry login server>/v2/. Exempel: https://mycontainerregistry.azsacr.<regionname>.<fqdn>/v2/

Hur tar jag 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 --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }

Kommentar

Du kan lägga till --yes 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 validerar jag ä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.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest

Du bör kunna se att lagringsanvändningen har ökat i Azure Stack Hub-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 autentiserar jag 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

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öder Azure Container Registry på Azure Stack Hub Content Trust?

Nej, den aktuella versionen av Azure-containerregistret på Azure Stack Hub stöder bara SKU:n "Standard" och stöder inte Content Trust.

Hur beviljar jag åtkomst till pull- eller push-avbildningar utan behörighet att hantera registerresursen?

Azure Container Registry har stöd för 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 Stack Hub-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.azsacr.<regionname>.<fqdn>/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 skickar jag 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.azsacr.<regionname>.<fqdn>"]
    }
    

    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 det här verktyget för att testa nedladdningshastigheten för datorns nätverk.

Docker-push är långsam

Använd det här verktyget för att testa uppladdningshastigheten för datorns nätverk.

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.azsacr.<regionname>.<fqdn>/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.azsacr.<regionname>.<fqdn>/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å Azure Container Registry-tokenservern. Det 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.azsacr.<regionname>.<fqdn>
    docker login myregistry.azsacr.<regionname>.<fqdn>
    

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 visar inte Azure Stack Hub-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 Stack Hub-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:

  • Avbildningen eller lagringsplatsen kanske är låst 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 "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 samlar jag 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)

Nästa steg