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 (ACR) med hjälp av en ARM-mall (Azure Resource Manager) ?
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
Det här felet uppstår när en användare har rollen i Container Registry Contributor and Data Access Configuration Administrator ett register – vilket tillåter replikborttagning via Azure CLI – men saknar läsarbehörighet för prenumerationen. Läsaråtkomst i prenumerationen krävs för att ta bort repliker via portalen. 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 ä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 kan alla manifest som inte refereras till av någon tagg på en lagringsplats tas bort?
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 till 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. Det här steget säkerställer att avbildningen har ett lager som inte delas med 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 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 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 har dragits tillbaka.
Stödjer Azure Container Registry innehållsförtroende?
Ja, du kan använda betrodda avbildningar i Azure Container Registry med Docker Content Trust. Mer information finns i Innehållsförtroende i Azure Container Registry.
Var finns filen för tumavtrycket?
Inom ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadataramen för :
- 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.jsonförtargets/releasesrollen).
Du bör verifiera de offentliga nycklarna och certifikaten efter den övergripande TUF-verifieringen som utförts av Docker- och Notary-klienten.
如何实现 bevilja åtkomst till pull- eller push-avbildningar utan att bevilja behörighet att hantera registerresursen?
ACR stöder Microsoft Entra rollbaser åtkomstkontroll (RBAC) och inbyggda roller som ger olika nivåer av Microsoft Entra-baserade behörigheter, till exempel att bevilja push- eller pull-behörigheter för avbildningar utan att bevilja behörigheter till hela registret.
Du kan också använda [Microsoft Entra attributbaserad åtkomstkontroll (ABAC)] för att hantera Microsoft Entra-baserade lagringsplatsbehörigheter och omfångsrolltilldelningar till specifika lagringsplatser.
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. Karantänläget för ett register kan aktiveras så att endast avbildningar som godkänns i säkerhetsgenomsökningar är synliga för vanliga användare. Mer information finns i ACR GitHub-lagringsplatsen.
Hur gör jag för att aktivera anonym hämtningsåtkomst?
Mer information finns i Göra registerinnehållet offentligt tillgängligt.
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-meddelanden är för nätverksbegränsade register, luftgapade register med begränsad åtkomst eller för register utan Internetanslutning.
Om du till exempel har konfigurerade regler för nätverkssäkerhetsgrupper (NSG) så att en virtuell dator endast kan hämta avbildningar från ditt Azure-containerregister, kommer Docker att stöta på fel när du hämtar främmande eller icke-distribuerbara lager. 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.jsonRedigera filen, som finns i/etc/docker/på Linux-värdar och påC:\ProgramData\docker\config\daemon.jsonWindows 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.
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 omdistribution av icke-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 kan ett nytt försök lyckas.
- Om
docker pullmisslyckas 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 acrversionen 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 bör du överväga att använda en virtuell Azure-dator (VM) 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:
Lägg till alternativet
--signature-verification=falsei 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.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.
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 /hostNu 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 logoutdu 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 curl hjälp av -L 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 Azure Portal inte 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 hämtar Azure Portal inte lagringsplatser eller taggar?
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 (Domain Name Server)
Kontakta din nätverksadministratör eller kontrollera din nätverkskonfiguration och anslutning. 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 hjälp av az acr update eller Azure Portal.
- 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 "begärda data finns inte" när du anger ett databasnamn i databasåtgärder kontrollerar du stavningen och skiftläget för namnet. 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
- Aktivera dekryptering av HTTPS i Fiddler
- Aktivera Docker för att använda en proxy via Docker-användargränssnittet.
- Var noga med att återställa när du är klar. Docker fungerar inte när detta ä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)
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 (på engelska) | 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 felet är tillfälligt och inträffar när rolltilldelningen för din hanterade identitet inte har spridits ännu. 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 timeout-problem?
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 är inställd på respektive principstatus, blockerar användare 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 | Inaktivera |
| Containerregister bör ha ett lokalt administratörskonto inaktiverat. | Neka | Inaktivera |
| Containerregister bör ha ett lokalt administratörskonto inaktiverat. | Revisionsgranskning | inkompatibel |
Nästa steg
- Läs mer om Azure Container Registry.