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

Tento článek popisuje Nejčastější dotazy a známé problémy týkající se Azure Container Registry.

Pokyny k odstraňování potíží registru najdete v těchto tématech:

Správa prostředků

Můžu vytvořit Azure Container Registry pomocí šablony Správce prostředků?

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

Kontroluje se u obrázků v ACR chyba zabezpečení?

Ano. Podívejte se na dokumentaci od programu Microsoft Defender pro Cloud, TwistLock a azurová.

Návody nakonfigurovat Kubernetes pomocí Azure Container Registry?

Přečtěte si dokumentaci k Kubernetes a krokům pro službu Azure Kubernetes.

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

Důležité

Uživatelský účet správce je navržený pro jednoho uživatele, který má přístup k registru, hlavně pro účely testování. Nedoporučujeme sdílení přihlašovacích údajů účtu správce s více uživateli. Pro uživatele a instanční objekty se doporučuje použít pro scénáře s doplňováním provozu individuální identitu. 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 s oprávněními 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ě Správce prostředků?

Důležité

Uživatelský účet správce je navržený pro jednoho uživatele, který má přístup k registru, hlavně pro účely testování. Nedoporučujeme sdílení přihlašovacích údajů účtu správce s více uživateli. Pro uživatele a instanční objekty se doporučuje použít pro scénáře s doplňováním provozu individuální identitu. 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 s oprávněními správce registru.

První heslo získáte takto:

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

Druhé heslo získáte takto:

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

Odstranění replikace se nezdařilo, stav zakázáno, i když se replikace odstraní pomocí Azure CLI nebo Azure PowerShell

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

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

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

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

Operace registru

Návody přístup k HTTP API v2 registru Docker?

ACR podporuje HTTP API v2 v registru Docker. Rozhraní API jsou k dispozici na adrese https://<your registry login server>/v2/ . Příklad: https://mycontainerregistry.azurecr.io/v2/

Návody odstranit všechny manifesty, na které není odkazováno pomocí žádné značky v úložišti?

Pokud jste na 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@%

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

Poznámka

-yK přeskočení potvrzení můžete přidat v příkazu DELETE.

Další informace najdete v tématu odstranění imagí kontejneru v Azure Container Registry.

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

K této situaci může dojít, pokud jsou na podkladové vrstvy pořád odkazovány jinými imagemi kontejneru. Pokud odstraníte image bez odkazů, použití registru se během několika minut aktualizuje.

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

Pomocí následujícího souboru Docker vytvořte image s vrstvou 1 GB. Tím se zajistí, že bitová kopie bude mít vrstvu, která není sdílená žádným jiným obrázkem v registru.

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

Sestavte a nahrajte image do svého registru pomocí Docker CLI.

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

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

az acr show-usage -n myregistry

Odstraňte Image pomocí Azure CLI nebo portálu a za pár minut si Projděte aktualizované využití.

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

Návody ověřování pomocí registru při spuštění CLI v kontejneru?

Musíte spustit kontejner Azure CLI připojením k soketu Docker:

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 proveďte ověření v registru:

az acr login -n MyRegistry

Jak povolit TLS 1,2?

Povolte TLS 1,2 pomocí libovolného nedávného klienta Docker (verze 18.03.0 a vyšší).

Důležité

Od 13. ledna 2020 bude Azure Container Registry vyžadovat, aby všechna zabezpečená připojení ze serverů a aplikací používala protokol TLS 1,2. Bude vyřazena podpora TLS 1,0 a 1,1.

Podporuje Azure Container Registry důvěryhodnost obsahu?

Ano, v Azure Container Registry můžete použít důvěryhodné image, protože je Docker notář integrovaný a dá se povolit. Podrobnosti najdete v tématu vztah důvěryhodnosti obsahu v Azure Container Registry.

Kde se nachází soubor pro kryptografický otisk?

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 root.json .
  • Veřejné klíče a certifikáty role delegování jsou uloženy v souboru JSON své nadřazené role (například targets.json pro targets/releases roli).

Doporučuje se tyto veřejné klíče a certifikáty ověřit po celkovém ověření TUF, které provádí Docker a notář klient.

Návody udělit přístup k vyžádanému nebo nabízenému obrázku 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 role a AcrPush umožňují uživatelům načítat a vkládat image bez oprávnění ke správě prostředku registru v Azure.

  • Azure Portal: registr-> Access Control (IAM) – > přidejte (vyberte AcrPull nebo AcrPush pro roli).

  • Azure CLI: vyhledejte ID prostředku v registru spuštěním následujícího příkazu:

    az acr show -n myRegistry
    

    Pak můžete přiřadit AcrPull AcrPush roli nebo uživateli (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 k instančnímu objektu identifikovanému jeho ID aplikace:

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

Nabyvatel pak může ověřit image v registru a získat k nim přístup.

  • Ověření v registru:

    az acr login -n myRegistry 
    
  • K vypsání úložišť:

    az acr repository list -n myRegistry
    
  • Postup načtení obrázku:

    docker pull myregistry.azurecr.io/hello-world
    

V případě použití jenom AcrPull AcrPush role nebo nemá nabyvatel oprávnění spravovat prostředek registru v Azure. Například, az acr list nebo az acr show -n myRegistry nezobrazuje registr.

Návody povolit automatické karantény imagí pro registr?

Karanténa obrázku je teď funkcí Preview ACR. Můžete povolit karanténní režim registru, aby byly normálním uživatelům viditelné pouze ty image, které úspěšně prošly kontrolou zabezpečení. podrobnosti najdete v úložišti ACR GitHub.

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

Návody do registru vložit nedistribuovatelné vrstvy?

Nedistribuovatelný vrstva v manifestu obsahuje parametr adresy URL, ze kterého se dá obsah načíst. Některé možné případy použití pro povolení nedistribuovatelných nabízených vrstev jsou pro Registry s omezenou sítí, gapped Registry s omezeným přístupem nebo pro Registry bez připojení k Internetu.

Pokud máte třeba pravidla NSG nastavená tak, aby virtuální počítač mohl vyžádat image jenom z Azure Container Registry, Docker bude načítat chyby pro cizí a nedistribuovatelné vrstvy. například bitová kopie serveru Windows Server by obsahovala v manifestu Azure container registry odkazy na cizí vrstvy a v tomto scénáři by se nepodaří získat.

Chcete-li povolit vkládání nedistribuovatelných vrstev:

  1. upravte daemon.json soubor, který se nachází v části /etc/docker/ hostitelé Linux a na C:\ProgramData\docker\config\daemon.json serveru Windows. 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 soubor a ukončete ho.

  3. Restartujte Docker.

Když nasoudíte image do registrů v seznamu, jejich ne distribuovatelné vrstvy se předá do registru.

Upozornění

Ne distribuovatelné artefakty mají obvykle omezení, jak a kde je lze distribuovat a sdílet. Tuto funkci použijte pouze k nabízení artefaktů do privátních registrů. Ujistěte se, že jste v souladu s podmínkami, které zahrnují redistribuci nedistribuovatelných artefaktů.

Diagnostika a kontroly stavu

Kontrola stavu pomocí `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 kontejnerů Azure.

Docker pull selže s chybou: net/http: požadavek se zrušil při čekání na připojení (Při čekání na hlavičky došlo k překročení časového limitu client.timeout).

  • Pokud se jedná o přechodný problém, bude opakování úspěšné.
  • Pokud nepřetržitě selže, může dojít k problému docker pull s démonem Dockeru. Tento problém je obecně možné zmírnit restartováním démona Dockeru.
  • Pokud tento problém přetrvává i po restartování démona Dockeru, může se problém týká některých problémů se síťovým připojením k počítači. Pokud chcete zkontrolovat, jestli je obecná síť na počítači v pořádku, spuštěním následujícího příkazu otestujte připojení koncového bodu. Minimální az acr verze, která obsahuje tento příkaz pro kontrolu připojení, je 2.2.9. Pokud používáte starší verzi, upgradujte Azure CLI.
az acr check-health -n myRegistry
  • U všech operací klienta Dockeru byste vždy měli mít mechanismus opakování.

Docker pull je pomalý

Pomocí tohoto nástroje otestujte rychlost stahování ze sítě počítače. Pokud je počítačová síť pomalá, zvažte použití virtuálního počítače Azure ve stejné oblasti jako váš registr. To vám obvykle poskytuje rychlejší síť.

Docker push je pomalý

Pomocí tohoto nástroje otestujte rychlost nahrávání do sítě počítače. Pokud je počítačová síť pomalá, zvažte použití virtuálního počítače Azure ve stejné oblasti jako váš registr. To vám obvykle poskytuje rychlejší síť.

Nabízená oznámení Dockeru jsou úspěšná, ale docker pull selže s chybou: Neautorizované: vyžaduje se ověření

K této chybě může dojít u verze Red Hat démona Dockeru, 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émona Dockeru:

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

Pokud --signature-verification=false chybí , dojde k selhání s docker pull 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 démona Dockeru /etc/sysconfig/docker . 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
    

Podrobnosti najdete --signature-verification spuštěním . man dockerd

az acr login je úspěšné, ale Docker selže s chybou: Unauthorized: authentication required

Ujistěte se, že používáte adresu URL serveru malými písmeny, například , a to i v případě, že je název prostředku registru velkými nebo smíšenými docker push myregistry.azurecr.io/myimage:latest 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 ( ), pokud neexistuje, a /etc/docker/daemon.json přidejte debug možnost :

{    
    "debug": true    
}

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

sudo service docker restart

Podrobnosti najdete v dokumentaci k Dockeru.

  • Protokoly se mohou 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.

  • Pro Docker for Windows se protokoly generují v %LOCALAPPDATA%/docker/. Nemusí však ještě 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ěkteré další kroky:

    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 virtuálního počítače se systémem dockerd . Protokol je na adrese /var/log/docker.log .

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

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

  • Azure Active Directory přiřazení role. 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 to trvat až 10 minut. Pokud chcete tento problém zmírnit, můžete se po 1 minutě znovu ověřit u docker logout stejného uživatele:

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

ACR v současné době nepodporuje odstranění domovské replikace ze strany uživatelů. Alternativním řešením je zahrnout vytvoření domovské replikace do šablony, ale přeskočit jeho vytvoření "condition": false přidáním, 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'))]"
     ]
},

Ověřovací informace nejsou u přímých volání REST API formátu.

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

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 curl některé implementace následují po přesměrování s hlavičkami z původního požadavku.

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

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č aplikace Azure Portal všechny moje úložiště nebo značky?

Pokud používáte prohlížeč Microsoft Edge/IE, můžete zobrazit až 100 úložišť nebo značek. Pokud má váš registr více než 100 úložišť nebo značek, doporučujeme k jejich zobrazení zobrazit seznam všech v prohlížeči Firefox nebo Chrome.

Proč se Azure Portal načítání úložišť nebo značek?

Prohlížeč možná nebude moct odeslat požadavek na načtení úložišť nebo značek na server. Může to mít různé důvody:

  • 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 pomocí Azure CLI zkontrolovat, jestli se vaše prostředí může připojit k az acr check-health -n yourRegistry Container Registry. Kromě toho můžete také vyzkoušet anonymní nebo privátní relaci v prohlížeči, abyste se vyhnuli jakékoli zastaralé mezipaměti prohlížeče nebo souborům cookie.

Proč moje žádost o vyžádání nebo nabízení selže s nepovolenou operací?

Tady je několik scénářů, ve kterých může být operace zakázána:

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 případ názvu. Platné názvy úložiště mohou obsahovat pouze malá písmena alfanumerických znaků, tečky, pomlčky, podtržítka a lomítka.

Úplná pravidla pojmenování úložiště najdete v tématu Specifikace OPEN CONTAINER Initiative Distribution Specification.

Návody shromažďování trasování HTTP na Windows?

Požadavky

Kontejnery Windows

Konfigurace proxy Serveru Dockeru na 127.0.0.1:8888

Linuxové kontejnery

Vyhledejte IP adresu virtuálního přepínače Docker vm:

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

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

Úkoly

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

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 příkaz az acr build zahrnout složku .git?

Pokud příkazu předáte místní zdrojovou složku, je složka ve výchozím nastavení vyloučená z az acr build .git nahraného balíčku. Soubor můžete .dockerignore vytvořit s následujícím nastavením. Říká příkazu, aby obnovl všechny soubory v rámci .git nahraného balíčku.

!.git/**

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

Podporují úlohy GitLab pro triggery zdroje?

V současné době nepodporujeme GitLab pro aktivační události zdroje.

Jakou službu správy úložiště Git služba Tasks podporuje?

Služba Git Zdrojový kontext Ruční sestavení Automatické sestavení prostřednictvím triggeru potvrzení
GitHub https://github.com/user/myapp-repo.git#mybranch:myfolder Ano Yes
Azure Repos https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder Yes 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í

Chybová zpráva Průvodce odstraňováním potíží
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 az login --identity v úkolu ACR používáte . Jedná se o přechodnou chybu, ke které dochází v případě, že se nešířela přiřazení role vaší spravované identity. Několik sekund čekání, než bude opakování fungovat.

Integrace CI/CD

Další kroky