Nejčastější dotazy – Azure Container Registry

Tento článek se zabývá nejčastějšími dotazy a známými problémy se službou Azure Container Registry.

Pokyny k řešení potíží s registrem najdete tady:

Řízení zdrojů

Můžu vytvořit službu Azure Container Registry pomocí šablony Resource Manageru?

Ano. Tady je šablona , kterou můžete použít k vytvoření registru.

Existuje kontrola ohrožení zabezpečení imagí ve službě ACR?

Ano. Podívejte se na dokumentaci z Programu Microsoft Defender for Cloud, Twistlock a Aqua.

Návody nakonfigurovat Kubernetes se službou Azure Container Registry?

Viz dokumentace pro Kubernetes a kroky pro Azure Kubernetes Service.

Návody získat přihlašovací údaje správce pro registr kontejneru?

Důležité

Uživatelský účet správce je určený pro jednoho uživatele pro přístup k registru, hlavně pro účely testování. Nedoporučujeme sdílet přihlašovací údaje účtu správce s více uživateli. Individuální identita se doporučuje pro uživatele a instanční objekty pro bezobslužné scénáře. Viz Přehled ověřování.

Před získáním přihlašovacích údajů správce se ujistěte, že je povolený uživatel správce registru.

Získání přihlašovacích údajů pomocí Azure CLI:

az acr credential show -n myRegistry

Pomocí Azure PowerShellu:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Návody získat přihlašovací údaje správce v šabloně Resource Manageru?

Důležité

Uživatelský účet správce je určený pro jednoho uživatele pro přístup k registru, hlavně pro účely testování. Nedoporučujeme sdílet přihlašovací údaje účtu správce s více uživateli. Individuální identita se doporučuje pro uživatele a instanční objekty pro bezobslužné scénáře. Viz Přehled ověřování.

Před získáním přihlašovacích údajů správce se ujistěte, že je povolený uživatel správce registru.

Získání prvního hesla:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

Pokud chcete získat druhé heslo:

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

Odstranění replikace selže se stavem Zakázáno, i když se replikace odstraní pomocí Azure CLI nebo Azure PowerShellu

Tato chyba se zobrazí, když má uživatel oprávnění k registru, ale nemá oprávnění na úrovni čtenáře pro předplatné. Pokud chcete tento problém vyřešit, přiřaďte uživateli oprávnění čtenáře k předplatnému:

az role assignment create --role "Reader" --assignee user@contoso.com --scope /subscriptions/<subscription_id> 

Pravidla brány firewall se úspěšně aktualizují, ale neprojevují se

Rozšíření změn pravidel brány firewall nějakou dobu trvá. Po změně nastavení brány firewall počkejte několik minut, než tuto změnu ověříte.

Operace registru

Návody přístup k rozhraní HTTP API registru Dockeru V2?

ACR podporuje rozhraní API HTTP registru Dockeru V2. K rozhraním API je možné přistupovat na adrese https://<your registry login server>/v2/. Příklad: https://mycontainerregistry.azurecr.io/v2/

Návody odstranit všechny manifesty, na které se v úložišti neodkazuje žádná značka?

Pokud používáte 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@%

Pro 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@$_ }

Poznámka:

Potvrzení můžete -y přeskočit přidáním příkazu delete.

Další informace najdete v tématu Odstranění imagí kontejneru ve službě Azure Container Registry.

Proč se využití kvóty registru po odstranění imagí nezmenšuje?

K této situaci může dojít v případě, že na podkladové vrstvy stále odkazují jiné image kontejneru. Pokud odstraníte image bez odkazů, aktualizuje se využití registru za několik minut.

Návody ověřit změny kvóty úložiště?

Vytvořte image s vrstvou 1 GB pomocí následujícího souboru Dockeru. Tím se zajistí, že image má vrstvu, kterou nesdílí žádná jiná image v registru.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Sestavte a nasdílejte image do registru pomocí rozhraní příkazového řádku Dockeru.

docker build -t myregistry.azurecr.io/1gb:latest .
docker push myregistry.azurecr.io/1gb:latest

Měli byste vidět, že se využití úložiště zvýšilo na webu Azure Portal, nebo se můžete dotazovat na využití pomocí rozhraní příkazového řádku.

az acr show-usage -n myregistry

Odstraňte image pomocí Azure CLI nebo portálu a zkontrolujte aktualizované využití během několika minut.

az acr repository delete -n myregistry --image 1gb

Návody ověření pomocí registru při spuštění rozhraní příkazového řádku v kontejneru?

Kontejner Azure CLI musíte spustit připojením soketu Dockeru:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

V kontejneru nainstalujte docker:

apk --update add docker

Pak se ověřte pomocí registru:

az acr login -n MyRegistry

Jak povolit protokol TLS 1.2?

Povolte protokol TLS 1.2 pomocí libovolného nedávného klienta Dockeru (verze 18.03.0 a vyšší).

Důležité

Od 13. ledna 2020 bude služba Azure Container Registry vyžadovat všechna zabezpečená připojení ze serverů a aplikací k používání protokolu TLS 1.2. Podpora protokolu TLS 1.0 a 1.1 bude vyřazena.

Podporuje služba Azure Container Registry důvěryhodnost obsahu?

Ano, ve službě Azure Container Registry můžete používat důvěryhodné image, protože notář Dockeru je integrovaný a dá se povolit. Podrobnosti najdete v tématu Důvěryhodnost obsahu ve službě Azure Container Registry.

Kde se soubor kryptografického otisku nachází?

V části ~/.docker/trust/tuf/myregistry.azurecr.io/myrepository/metadata:

  • Veřejné klíče a certifikáty všech rolí (s výjimkou rolí delegování) jsou uloženy v souboru root.json.
  • Veřejné klíče a certifikáty role delegování se ukládají do souboru JSON nadřazené role (například targets.json pro targets/releases roli).

Doporučuje se ověřit tyto veřejné klíče a certifikáty po celkovém ověření TUF provedeném klientem Dockeru a notáře.

Návody udělit přístup k vyžádání nebo nabízení imagí bez oprávnění ke správě prostředku registru?

ACR podporuje vlastní role , které poskytují různé úrovně oprávnění. Konkrétně AcrPull a AcrPush role umožňují uživatelům vyžádat a/nebo nasdílit image bez oprávnění ke správě prostředku registru v Azure.

  • Azure Portal: Váš registr –> Řízení přístupu (IAM) –> Přidání (výběr AcrPull nebo AcrPush pro roli).

  • Azure CLI: Spuštěním následujícího příkazu najděte ID prostředku registru:

    az acr show -n myRegistry
    

    Potom můžete uživateli přiřadit AcrPull roli AcrPush (následující příklad používá AcrPull):

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    Nebo přiřaďte roli instančnímu objektu identifikovanému id aplikace:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

Přiřazování pak může ověřovat a přistupovat k imagím v registru.

  • Ověření v registru:

    az acr login -n myRegistry 
    
  • Zobrazení seznamu úložišť:

    az acr repository list -n myRegistry
    
  • Stažení obrázku:

    docker pull myregistry.azurecr.io/hello-world
    

Při použití pouze role AcrPull nebo AcrPush role nemá přiřazený správce oprávnění ke správě prostředku registru v Azure. Registr se například az acr listaz acr show -n myRegistry nezobrazí.

Návody povolení automatické karantény image pro registr?

Karanténa obrázku je v současné době funkcí ACR ve verzi Preview. Režim karantény registru můžete povolit tak, aby se normálním uživatelům zobrazovaly jenom image, které úspěšně prošly kontrolou zabezpečení. Podrobnosti najdete v úložišti ACR Na GitHubu.

Jak můžu povolit anonymní přístup pro čtení?

Další informace naleznete v tématu Zpřístupnění obsahu registru veřejně.

Návody nasdílení ne distribuovatelných vrstev do registru?

Ne distribuovatelná vrstva v manifestu obsahuje parametr adresy URL, ze kterého se obsah může načíst. Některé možné případy použití pro povolení ne distribuovatelných nabízených oznámení vrstvy jsou určené pro registry s omezeným přístupem v síti, registry s omezeným přístupem nebo pro registry bez připojení k internetu.

Pokud máte například nastavená pravidla NSG tak, aby mohl virtuální počítač načíst image jenom z registru kontejneru Azure, Docker načte selhání cizích nebo neretribuovatelných vrstev. Image jádra Windows Serveru by například v manifestu obsahovala odkazy na cizí vrstvy do registru kontejneru Azure a v tomto scénáři by se nepodařilo načíst.

Povolení nabízení ne distribuovatelných vrstev:

  1. daemon.json Upravte soubor, který se nachází na /etc/docker/ hostitelích s Linuxem a na C:\ProgramData\docker\config\daemon.json Windows Serveru. Za předpokladu, že byl soubor dříve prázdný, přidejte následující obsah:

    {
      "allow-nondistributable-artifacts": ["myregistry.azurecr.io"]
    }
    

    Poznámka:

    Hodnota je pole adres registru oddělené čárkami.

  2. Uložte a ukončete soubor.

  3. Restartujte Docker.

Když nasdílíte image do registrů v seznamu, jejich ne distribuovatelné vrstvy se nasdílí do registru.

Upozorňující

Nedistribuovatelné artefakty obvykle mají omezení, jak a kde je lze distribuovat a sdílet. Tuto funkci použijte pouze k nasdílení artefaktů do privátních registrů. Ujistěte se, že splňujete všechny podmínky, které pokrývají redistribuci neredistribuovatelných artefaktů.

Diagnostika a kontroly stavu

Kontrola stavu pomocí příkazu az acr check-health

Informace o řešení běžných problémů s prostředím a registrem najdete v tématu Kontrola stavu registru kontejneru Azure.

Přijetí změn Dockeru selže s chybou: net/http: Požadavek se zrušil při čekání na připojení (Klient.Timeout byl překročen při čekání na hlavičky).

  • Pokud se jedná o přechodný problém, zkuste to znovu.
  • Pokud docker pull dojde k selhání nepřetržitě, může dojít k problému s démonem Dockeru. Problém lze obecně zmírnit restartováním démona Dockeru.
  • Pokud se po restartování démona Dockeru dál zobrazuje tento problém, může se jednat o problémy s připojením k síti s počítačem. Pokud chcete zkontrolovat, jestli je obecná síť na počítači v pořádku, spusťte následující příkaz a otestujte připojení koncového bodu. Minimální az acr verze, která obsahuje tento příkaz kontroly připojení, je 2.2.9. Pokud používáte starší verzi, upgradujte azure CLI.
az acr check-health -n myRegistry
  • Vždy byste měli mít mechanismus opakování pro všechny operace klienta Dockeru.

Vyžádání dockeru je pomalé

Pomocí nástroje pro rychlost otestujte rychlost stahování sítě počítače. Pokud je síť počítače pomalá, zvažte použití virtuálního počítače Azure ve stejné oblasti jako registr ke zlepšení rychlosti sítě.

Nabízení Dockeru je pomalé

Pomocí nástroje pro rychlost otestujte rychlost nahrávání sítě počítače. Pokud je síť počítače pomalá, zvažte použití virtuálního počítače Azure ve stejné oblasti jako registr ke zlepšení rychlosti sítě.

Nabízení Dockeru je úspěšné, ale přijetí změn Dockeru selže s chybou: Neautorizováno: Vyžadováno ověření

K této chybě může dojít u verze démona Dockeru v Red Hatu, kde --signature-verification je ve výchozím nastavení povolená. Možnosti démona Dockeru pro Red Hat Enterprise Linux (RHEL) nebo Fedora můžete zkontrolovat spuštěním následujícího příkazu:

grep OPTIONS /etc/sysconfig/docker

Například Fedora 28 Server má následující možnosti démon dockeru:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Pokud --signature-verification=false chybí, docker pull selže s chybou podobnou této:

Trying to pull repository myregistry.azurecr.io/myimage ...
unauthorized: authentication required

Řešení chyby:

  1. Přidejte možnost --signature-verification=false do konfiguračního souboru /etc/sysconfig/dockerdémona Dockeru . Příklad:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. Restartujte službu démona Dockeru spuštěním následujícího příkazu:

    sudo systemctl restart docker.service
    

--signature-verification Podrobnosti naleznete spuštěním man dockerdpříkazu .

příkaz az acr login je úspěšný, ale Docker selže s chybou: Neautorizováno: Vyžadováno ověřování

Ujistěte se, že používáte například adresu URL serveru malými písmeny, docker push myregistry.azurecr.io/myimage:latesti když je název prostředku registru velkými nebo smíšenými písmeny, například myRegistry.

Povolení a získání protokolů ladění démona Dockeru

Začněte dockerd s debug možností. Nejprve vytvořte konfigurační soubor démona Dockeru (/etc/docker/daemon.json), pokud neexistuje, a přidejte možnost debug :

{    
    "debug": true    
}

Potom proces démon restartujte. Například s Ubuntu 14.04:

sudo service docker restart

Podrobnosti najdete v dokumentaci k Dockeru.

  • Protokoly se můžou generovat v různých umístěních v závislosti na vašem systému. Například pro Ubuntu 14.04 je to /var/log/upstart/docker.log.
    Podrobnosti najdete v dokumentaci k Dockeru.

  • V případě Dockeru pro Windows se protokoly generují v části %LOCALAPPDATA%/docker/. Nemusí však obsahovat všechny informace o ladění.

    Pokud chcete získat přístup k úplnému protokolu démona, možná budete potřebovat několik dalších kroků:

    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
    

    Teď máte přístup ke všem souborům spuštěného dockerdvirtuálního počítače . Protokol je na /var/log/docker.logadrese .

Nová uživatelská oprávnění nemusí být efektivní okamžitě po aktualizaci

Když instančnímu objektu udělíte nová oprávnění (nové role), změna se nemusí projevit okamžitě. Existují dva možné důvody:

  • Zpoždění přiřazení role Microsoft Entra Obvykle je to rychlé, ale může to trvat minuty kvůli zpoždění šíření.

  • Zpoždění oprávnění na serveru tokenů ACR může trvat až 10 minut. Pokud chcete tento problém zmírnit, můžete docker logout se po 1 minutě znovu ověřit u stejného uživatele:

    docker logout myregistry.azurecr.io
    docker login myregistry.azurecr.io
    

ACR v současné době nepodporuje odstranění domácí replikace uživateli. Alternativním řešením je zahrnout domovskou replikaci, která se vytvoří v šabloně, ale přeskočit její vytvoření přidáním "condition": false , jak je znázorněno níže:

{
    "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'))]"
     ]
},

Informace o ověřování nejsou u přímých volání rozhraní REST API zadané ve správném formátu.

Může dojít k InvalidAuthenticationInfo chybě, zejména použití curl nástroje s možností -L, --location (pro sledování přesměrování). Například načtení objektu blob pomocí curl-L možnosti a základního ověřování:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

může vést k následující odpovědi:

<?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>

Hlavní příčinou je, že některé curl implementace následují přesměrování s hlavičkami z původního požadavku.

Pokud chcete tento problém vyřešit, musíte ručně sledovat přesměrování bez hlaviček. Vytiskněte hlavičky odpovědi s -D - možností curl a pak extrahujte: hlavičku Location :

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

Proč Azure Portal nevypisuje všechna moje úložiště nebo značky?

Pokud používáte prohlížeč Microsoft Edge/IE, můžete zobrazit maximálně 100 úložišť nebo značek. Pokud má váš registr více než 100 úložišť nebo značek, doporučujeme k jejich výpisu použít prohlížeč Firefox nebo Chrome.

Proč se webu Azure Portal nedaří načíst úložiště nebo značky?

Prohlížeč nemusí být schopen odeslat požadavek na načtení úložišť nebo značek na server. Můžou se zde vyskytovat různé důvody, například:

  • Nedostatek síťového připojení
  • Brána firewall
  • Použití portálu z veřejné sítě pro registr, který umožňuje pouze privátní přístup
  • Blokování reklam
  • Chyby DNS

Obraťte se na správce sítě nebo zkontrolujte konfiguraci sítě a připojení. Zkuste spustit az acr check-health -n yourRegistry pomocí Azure CLI a zkontrolujte, jestli se vaše prostředí může připojit ke službě Container Registry. Kromě toho můžete v prohlížeči vyzkoušet anonymní nebo soukromou relaci, abyste se vyhnuli zastaralé mezipaměti prohlížeče nebo souborům cookie.

Proč moje žádost o přijetí změn nebo nabízení selže s nepovolenou operací?

Tady je několik scénářů, kdy se operace můžou nepovolit:

  • Klasické registry se už nepodporují. Upgradujte na podporovanou úroveň služby pomocí příkazu az acr update nebo webu Azure Portal.
  • Image nebo úložiště možná zamknuté, aby ho nebylo možné odstranit nebo aktualizovat. K zobrazení aktuálních atributů můžete použít příkaz az acr repository show .
  • Některé operace jsou zakázány, pokud je image v karanténě. Přečtěte si další informace o karanténě.
  • Váš registr možná dosáhl limitu úložiště.

Formát úložiště je neplatný nebo nepodporovaný

Pokud se při zadávání názvu úložiště v operacích úložiště zobrazí chyba typu Nepodporovaný formát úložiště, Neplatný formát nebo Požadovaná data neexistují, zkontrolujte pravopis a malá a velká písmena názvu. Platné názvy úložišť můžou obsahovat jenom malá písmena alfanumerické znaky, tečky, pomlčky, podtržítka a lomítka.

Návody shromažďovat trasování http ve Windows?

Požadavky

  • Povolení dešifrování HTTPS ve Fiddleru
  • Povolte Dockeru použití proxy prostřednictvím uživatelského rozhraní Dockeru.
  • Po dokončení se nezapomeňte vrátit. Docker s tímto povoleným režimem nebude fungovat a Fiddler neběží.

Kontejnery Windows

Konfigurace proxy Dockeru na 127.0.0.1:8888

Linuxové kontejnery

Vyhledejte IP adresu virtuálního přepínače Virtuálního počítače Dockeru:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Nakonfigurujte proxy Dockeru pro výstup předchozího příkazu a port 8888 (například 10.0.75.1:8888).

Úlohy

Návody dávkové zrušení spuštění?

Následující příkazy zruší všechny spuštěné úlohy v zadaném registru.

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 %

Návody zahrnout složku .git do příkazu az acr build?

Pokud do příkazu předáte místní zdrojovou složku az acr build , .git složka je ve výchozím nastavení vyloučena z nahraného balíčku. Soubor můžete vytvořit .dockerignore pomocí následujícího nastavení. Příkaz řekne, aby obnovil všechny soubory .git v nahraném balíčku.

!.git/**

Toto nastavení platí také pro az acr run příkaz.

Podporuje Tasks GitLab pro triggery zdroje?

V současné době nepodporujeme GitLab pro triggery zdroje.

Jaká služba správy úložiště Git podporuje úlohy?

Služba Git Kontext zdroje Ruční sestavení Automatické sestavení prostřednictvím triggeru potvrzení
GitHubu https://github.com/user/myapp-repo.git#mybranch:myfolder Ano Yes
Azure Repos https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Ano Yes
GitLab https://gitlab.com/user/myapp-repo.git#mybranch:myfolder Yes No
BitBucket https://user@bitbucket.org/user/mayapp-repo.git#mybranch:myfolder Yes No

Řešení potíží s chybovou zprávou spuštění

Error message Příručka pro řešení problémů
Pro virtuální počítač nebyl nakonfigurovaný žádný přístup, proto se nenašla žádná předplatná. K tomu může dojít v případě, že používáte az login --identity ve službě ACR Task. Jedná se o přechodnou chybu, ke které dochází v případě, že se nerozšířila přiřazení role spravované identity. Počkejte několik sekund, než to zkusíte znovu.

Integrace CI/CD

Jak vyřešit selhání vytvoření fondu agentů kvůli problémům s vypršením časového limitu?

Nastavte správná pravidla brány firewall pro existující skupiny zabezpečení sítě nebo trasy definované uživatelem. Po nastavení počkejte několik minut, než se pravidla brány firewall použijí.

Jak povolíte předdefinované zásady Azure pro bloky ACR povolení přihlašovacích údajů správce?

Následující předdefinované zásady Azure při nastavení na odpovídající stav zásad uživateli zablokují povolení uživatele správce ve svém registru.

Předdefinované zásady Azure Stav zásad stav Správa
Nakonfigurujte registry kontejnerů tak, aby zakázaly účet místního správce. Změnit Zakázat
Registry kontejnerů by měly mít zakázaný účet místního správce. Odepřít Zakázat
Registry kontejnerů by měly mít zakázaný účet místního správce. Audit nedodržuje předpisy

Další kroky