Den här artikeln tar upp vanliga frågor och kända problem med Azure Container Registry.
Information om felsökning av register finns i:
Resurshantering
Kan jag skapa en Azure Container Registry med 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 avbildningar i ACR?
Ja. Mer information finns i dokumentationen från Microsoft Defender for Cloud ,Locklock och Aqua.
Hur gör jag för att konfigurera Kubernetes med Azure Container Registry?
Se dokumentationen för Kubernetes och steg för att Azure Kubernetes Service.
Hur gör jag för att du administratörsautentiseringsuppgifter för ett containerregister?
Viktigt
Administratörsanvändarkontot är utformat för att en enskild användare ska kunna komma åt registret, främst i testsyfte. Vi rekommenderar inte att du delar autentiseringsuppgifterna för administratörskontot med flera användare. Enskild identitet rekommenderas för användare och tjänstens huvudnamn för scenarier utan huvudnamn. Se Autentiseringsöversikt.
Kontrollera att registrets administratörsanvändare är aktiverad innan du hämtar administratörsautentiseringsuppgifter.
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 du administratörsautentiseringsuppgifter i en Resource Manager mall?
Viktigt
Administratörsanvändarkontot är utformat för att en enskild användare ska kunna komma åt registret, främst i testsyfte. Vi rekommenderar inte att du delar autentiseringsuppgifterna för administratörskontot med flera användare. Enskild identitet rekommenderas för användare och tjänstens huvudnamn för scenarier utan huvudnamn. Se Autentiseringsöversikt.
Kontrollera att registrets administratörsanvändare är aktiverad innan du hämtar administratörsautentiseringsuppgifter.
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örighet i ett register men inte har behörighet på läsarnivå för prenumerationen. Lös problemet genom att tilldela läsarbehö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 har inte verkställts
Det tar lite tid att sprida ändringar i brandväggsregeln. 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 HTTP API V2 för Docker-registret?
ACR stöder HTTP API V2 för Docker Registry. DU kan komma åt API:erna på https://<your registry login server>/v2/ . Exempel: https://mycontainerregistry.azurecr.io/v2/
Hur gör jag för att bort alla manifest som inte refereras till av någon tagg på en lagringsplats?
Om du använder bash:
az acr repository show-manifests -n myRegistry --repository myRepository --query "[?tags[0]==null].digest" -o tsv | xargs -I% az acr repository delete -n myRegistry -t myRepository@%
För PowerShell:
az acr repository show-manifests -n myRegistry --repository myRepository --query "[?tags[0]==null].digest" -o tsv | %{ az acr repository delete -n myRegistry -t myRepository@$_ }
Anteckning
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 kvoten för registret när avbildningar har tagits bort?
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 registrets användning om några minuter.
Hur gör jag för att du ändringar i lagringskvoten?
Skapa en avbildning med ett lager på 1 GB 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-push-skicka 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 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
Installera i docker containern:
apk --update add docker
Autentisera sedan med ditt register:
az acr login -n MyRegistry
Hur aktiverar jag TLS 1.2?
Aktivera TLS 1.2 med valfri nyligen genomförd Docker-klient (version 18.03.0 och senare).
Viktigt
Från och med 13 januari 2020 Azure Container Registry alla säkra anslutningar från servrar och program att använda TLS 1.2. Stöd för TLS 1.0 och 1.1 kommer att dras tillbaka.
Stöder Azure Container Registry Content Trust?
Ja, du kan använda betrodda avbildningar 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
targets.jsonexempel förtargets/releasesrollen).
Vi föreslår att du verifierar de offentliga nycklarna och certifikaten efter den övergripande TUF-verifieringen som gjorts av Docker- och Notary-klienten.
Hur gör jag för att bevilja åtkomst till att hämta eller skicka avbildningar utan behörighet att hantera registerresursen?
ACR stöder anpassade roller som ger olika behörighetsnivåer. Mer specifikt AcrPull tillåter roller att användare hämtar AcrPush och/eller push-hämtar avbildningar utan behörighet att hantera registerresursen i Azure.
Azure Portal: Ditt register -> Access Control (IAM) -> Lägg till
AcrPull(VäljAcrPusheller för rollen).Azure CLI: Leta reda på registrets resurs-ID genom att köra följande kommando:
az acr show -n myRegistrySedan kan du tilldela
AcrPullrollen eller till en användareAcrPush(i följande exempel användsAcrPull):az role assignment create --scope resource_id --role AcrPull --assignee user@example.comEller 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
Tilldelaren kan sedan autentisera och komma åt avbildningar i registret.
Så här autentiserar du till ett register:
az acr login -n myRegistrySå här listar du lagringsplatsen:
az acr repository list -n myRegistrySå här hämtar du en avbildning:
docker pull myregistry.azurecr.io/hello-world
Med enbart rollen eller har tilldelaren inte behörighet att AcrPull AcrPush hantera registerresursen i Azure. Till exempel az acr list eller visar inte az acr show -n myRegistry registret.
Hur gör jag för att aktivera automatisk avbildnings sätta i karantän för ett register?
Avbildningens karantän är för närvarande en förhandsgranskningsfunktion i ACR. Du kan aktivera karantänläget för ett register så att endast de avbildningar som har godkänt säkerhetsgenomsökningen visas 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ör ditt registerinnehåll offentligt tillgängligt.
Hur gör jag för att skicka icke-distributablea lager till ett register?
Ett icke-distributable lager i ett manifest innehåller en URL-parameter som innehåll kan hämtas från. Vissa möjliga användningsfall för att aktivera icke-distributable layer push-åtgärder är nätverksbegränsade register, air-gapped register med begränsad åtkomst eller för register utan Internetanslutning.
Om du till exempel har NSG-regler konfigurerade så att en virtuell dator endast kan hämta avbildningar från Ditt Azure-containerregister, hämtar Docker fel för externa/icke-distributable lager. Till exempel skulle en Windows Server Core-avbildning innehålla externa lagerreferenser till Azure-containerregistret i manifestet och skulle inte kunna hämta i det här scenariot.
Så här aktiverar du push-teknik för icke-distributable-lager:
Redigera filen
daemon.jsonsom finns i på/etc/docker/Linux-värdar och påC:\ProgramData\docker\config\daemon.jsonpå Windows Server. Förutsatt att filen tidigare var tom lägger du till följande innehåll:{ "allow-nondistributable-artifacts": ["myregistry.azurecr.io"] }Anteckning
Värdet är en matris med registeradresser, avgränsade med kommatecken.
Spara och avsluta filen.
Starta om Docker.
När du push-pushar avbildningar till registren i listan skickas deras icke-distributable lager till registret.
Varning
Icke-distributable artefakter har vanligtvis begränsningar för hur och var de kan distribueras och delas. Använd bara den här funktionen för att skicka artefakter till privata register. Se till att du följer alla villkor som täcker omfördelning av icke-disstribuerbara artefakter.
Diagnostik- och hälsokontroller
Kontrollera hälsa 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 felet: net/http: begäran avbröts i väntan på anslutning (Client.Timeout överskreds i väntan på huvuden)
- Om det här felet är ett tillfälligt problem lyckas återförsöket.
- Om
docker pullmisslyckas kontinuerligt kan det finnas ett problem med Docker-daemonen. Problemet kan vanligtvis åtgärdas genom att starta om Docker-daemonen. - Om du fortsätter att se det här problemet när du har startat om Docker-daemonen kan problemet vara problem med nätverksanslutningen på 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 acrversion 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 datorns nedladdningshastighet för nätverket. Om datornätverket är långsamt bör du överväga att använda en virtuell Azure-dator i samma region som ditt register. Detta ger vanligtvis snabbare nätverkshastighet.
Docker-push är långsam
Använd det här verktyget för att testa datorns uppladdningshastighet i nätverket. Om datornätverket är långsamt bör du överväga att använda en virtuell Azure-dator i samma region som ditt register. Detta ger vanligtvis snabbare nätverkshastighet.
Docker-push lyckas men docker pull misslyckas med fel: obehörig: autentisering krävs
Det här felet kan inträffa med Red Hat-versionen av Docker-daemonen, --signature-verification där ä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-daemonalternativ:
OPTIONS='--selinux-enabled --log-driver=journald --live-restore'
Om --signature-verification=false det saknas misslyckas ett fel som liknar docker pull följande:
Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required
Så här löser du felet:
Lägg till alternativet
--signature-verification=falsei konfigurationsfilen för Docker-daemon./etc/sysconfig/dockerEtt 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
Du hittar --signature-verification information om genom att köra man dockerd .
az acr login lyckas men docker misslyckas med felet: obehörig: autentisering krävs
Se till att du använder en server-URL med endast gemener, till exempel , även om namnet på registerresursen är docker push myregistry.azurecr.io/myimage:latest versaler eller gemener, till exempel myRegistry .
Aktivera och hämta felsökningsloggarna för Docker-daemonen
Börja dockerd med debug alternativet . Skapa först konfigurationsfilen för Docker-daemon ( /etc/docker/daemon.json ) om den inte finns och lägg till debug alternativet:
{
"debug": true
}
Starta sedan om daemon. Till exempel med Ubuntu 14.04:
sudo service docker restart
Information finns i Docker-dokumentationen.
Loggarna kan genereras på olika platser, beroende på systemet. För Ubuntu 14.04 är det till exempel
/var/log/upstart/docker.log.
Mer information finns i Docker-dokumentationen.För Docker 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 dator som kör
dockerd. Loggen finns på/var/log/docker.log.
Nya användarbehörigheter kanske inte börjar gälla omedelbart efter uppdateringen
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:
Azure Active Directory fördröjd rolltilldelning. Normalt går det snabbt, men det kan ta några minuter på grund av spridningsfördröjningen.
Behörighetsfördröjning på ACR-tokenserver. Det kan ta upp till 10 minuter. Du kan åtgärda detta genom
docker logoutatt 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 skapa hemreplikering i mallen men hoppa över skapandet genom att lägga till "condition": false det som visas 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 vid direkt REST API anrop
Du kan stöta på InvalidAuthenticationInfo ett fel, särskilt när curl du använder verktyget med alternativet ( för att följa -L --location omdirigeringar).
Du kan till exempel hämta bloben med curl hjälp av med alternativ och grundläggande -L 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 huvuden från den ursprungliga begäran.
För att lösa problemet måste du följa omdirigeringar manuellt utan rubrikerna. Skriv ut svarshuvudena -D - med alternativet för och extrahera curl 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 lagringsdatabaser eller taggar?
Om du använder webbläsaren Microsoft Edge/IE kan du se högst 100 lagringsplatsen eller taggarna. Om registret har fler än 100 lagringsplatsen eller taggar rekommenderar vi att du använder webbläsaren Firefox eller Chrome för att visa alla.
Varför kan Azure Portal inte hämta lagringsplatsen eller taggarna?
Webbläsaren kanske inte kan skicka begäran om att hämta lagringsplatsen 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 az acr check-health -n yourRegistry köra med Hjälp av 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 inaktuella webbläsarcacheminnen eller cookies.
Varför misslyckas min pull- eller push-begäran med otillåten åtgärd?
Här är några scenarier där åtgärder inte tillåts:
- 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 kan låsas 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 lagringsgränsen.
Lagringsplatsens format är ogiltigt eller stöds inte
Om du ser ett fel som "lagringsplatsens format som inte stöds", "ogiltigt format" eller "begärda data finns inte" när du anger ett lagringsplatsnamn i lagringsplatsåtgärder kontrollerar du stavningen och namnets fall. Giltiga lagringsplatsnamn får bara innehålla gemena alfanumeriska tecken, punkter, bindestreck, understreck och snedstreck.
Fullständiga namngivningsregler för lagringsplatsen finns i Open Container Initiative Distribution Specification.
Hur gör jag för att samla in HTTP-spårningar 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
- Kom ihåg att återställa när du är klar. Docker fungerar inte med detta aktiverat och Fiddler körs inte.
Windows-containrar
Konfigurera Docker-proxy till 127.0.0.1:8888
Linux-containrar
Leta reda på IP-adressen för den virtuella Docker-datorns växel:
(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 cancel-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 .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 .dockerignore en fil med följande inställning. Kommandot ska återställa alla filer under i .git det uppladdade paketet.
!.git/**
Den här inställningen gäller även för az acr run kommandot .
Stöder tasks GitLab för källutlösare?
Vi stöder för närvarande inte GitLab för källutlösare.
Vilken git-lagringsplatshanteringstjänst har Tasks stöd för?
| Git-tjänst | Källkontext | Manuell version | Skapa automatiskt via utlösare för genomförande |
|---|---|---|---|
| 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 | Inga |
| BitBucket | https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder |
Ja | Inga |
Felsökning av körningsfelmeddelande
| Felmeddelande | Felsökningsguide |
|---|---|
| Ingen åtkomst har konfigurerats för den virtuella datorn, och därför hittades inga prenumerationer | Detta kan inträffa om du använder i az login --identity din ACR-uppgift. Det här är ett tillfälligt fel som inträffar när rolltilldelningen för din hanterade identitet inte har spridits. Väntar några sekunder innan återförsöket fungerar. |
CI/CD-integrering
Nästa steg
- Läs mer om Azure Container Registry.