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 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 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örtargets/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 Portal: 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.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?
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-ö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.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 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:
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.azurecr.io/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å 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 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
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 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 "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
- 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 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)
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 | Inaktivera |
Containerregister bör ha ett lokalt administratörskonto inaktiverat. | Neka | Inaktivera |
Containerregister bör ha ett lokalt administratörskonto inaktiverat. | Audit | inkompatibel |
Nästa steg
- Läs mer om Azure Container Registry.