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
protargets/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
neboAcrPush
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
roliAcrPush
(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 list
az 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:
daemon.json
Upravte soubor, který se nachází na/etc/docker/
hostitelích s Linuxem a naC:\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.
Uložte a ukončete soubor.
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:
Přidejte možnost
--signature-verification=false
do konfiguračního souboru/etc/sysconfig/docker
démona Dockeru . Příklad:OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'
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 dockerd
pří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:latest
i 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
dockerd
virtuálního počítače . Protokol je na/var/log/docker.log
adrese .
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í |
---|---|---|---|
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 |
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í
Chybová zpráva | 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ávce |
---|---|---|
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
- Přečtěte si další informace o službě Azure Container Registry.