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:
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 .
När du har importerat de nödvändiga avbildningarna transporterar du datorn till platsen för den frånkopplade Azure Hub-instansen.
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
ellerAcrPush
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 ellerAcrPush
till en användare (i följande exempel användsAcrPull
):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:
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.
Spara och avsluta filen.
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:
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'
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:latest
till 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.log
det 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
- Aktivera dekryptering av https i fiddler: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS
- Aktivera Docker för att använda en proxy via Docker-användargränssnittet: https://docs.docker.com/docker-for-windows/#proxies
- Var noga med att återställa när du är klar. Docker fungerar inte med det här aktiverat och fiddler körs inte.
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
- Läs mer om Azure Container Registry.