Sdílet prostřednictvím


Řešení běžných potíží se službou Azure Container Instances

Tento článek ukazuje, jak řešit běžné problémy se správou nebo nasazením kontejnerů do služby Azure Container Instances. Podívejte se také na nejčastější dotazy.

Pokud potřebujete další podporu, podívejte se na dostupné možnosti nápovědy a podpory na webu Azure Portal.

Problémy při nasazování skupin kontejnerů

Zásady vytváření názvů

Při definování specifikace kontejneru vyžadují určité parametry dodržování omezení pojmenování. Následující tabulka uvádí konkrétní požadavky na vlastnosti skupiny kontejnerů. Další informace najdete v tématu Zásady vytváření názvů v Centru architektury Azure a pravidlech a omezeních pro prostředky Azure.

Obor Délka Velikost písmen Platné znaky Navrhovaný vzor Příklad
Názevkontejneru 1 1–63 Malá písmena Alfanumerické znaky a spojovník kdekoli kromě prvního nebo posledního znaku <name>-<role>-container<number> web-batch-container1
Porty kontejneru Mezi 1 a 65535 Celé číslo Celé číslo mezi 1 a 65535 <port-number> 443
Popisek názvu DNS 5-63 Rozlišování velikosti písmen Alfanumerické znaky a spojovník kdekoli kromě prvního nebo posledního znaku <name> frontend-site1
Proměnná prostředí 1–63 Rozlišování velikosti písmen Alfanumerické znaky a podtržítko (_) kdekoli kromě prvního nebo posledního znaku <name> MY_VARIABLE
Název svazku 5-63 Malá písmena Alfanumerické znaky a spojovníky kdekoli kromě prvního nebo posledního znaku. Nemůže obsahovat dvě po sobě jdoucí pomlčky. <name> batch-output-volume

1Omezení také pro názvy skupin kontejnerů, pokud nejsou zadány nezávisle na instancích kontejneru, například s nasazeními az container create příkazů.

Verze operačního systému image není podporovaná.

Pokud zadáte image, kterou Služba Azure Container Instances nepodporuje, OsVersionNotSupported vrátí se chyba. Chyba je podobná následující, kde {0} je název image, kterou jste se pokusili nasadit:

{
  "error": {
    "code": "OsVersionNotSupported",
    "message": "The OS version of image '{0}' is not supported."
  }
}

K této chybě nejčastěji dochází při nasazování imagí Windows založených na pololetním kanálu verze 1709 nebo 1803, které nejsou podporované. Podporované image Windows ve službě Azure Container Instances najdete v nejčastějších dotazech.

Nelze stáhnout obrázek

Pokud služba Azure Container Instances na začátku nemůže načíst image, opakuje se po určitou dobu. Pokud operace vyžádání image stále selže, ACI nakonec nasazení selže a může se zobrazit Failed to pull image chyba.

Pokud chcete tento problém vyřešit, odstraňte instanci kontejneru a zkuste nasazení zopakovat. Ujistěte se, že image existuje v registru a zadali jste název image správně.

Pokud image nejde načíst, v výstupu příkazu az container show se zobrazí události podobné následujícímu:

"events": [
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "Pulling",
    "type": "Normal"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "Failed to pull image \"mcr.microsoft.com/azuredocs/aci-hellowrld\": rpc error: code 2 desc Error: image t/aci-hellowrld:latest not found",
    "name": "Failed",
    "type": "Warning"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:20+00:00",
    "lastTimestamp": "2017-12-21T22:57:16+00:00",
    "message": "Back-off pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "BackOff",
    "type": "Normal"
  }
],

Chyba nedostupný prostředek

Kvůli různým oblastnímu zatížení prostředků v Azure se při pokusu o nasazení instance kontejneru může zobrazit následující chyba:

The requested resource with 'x' CPU and 'y.z' GB memory is not available in the location 'example region' at this moment. Please retry with a different resource request or in another location.

Tato chyba značí, že kvůli vysokému zatížení v oblasti, ve které se pokoušíte nasadit, není možné přidělovat prostředky zadané pro váš kontejner. Při řešení vašeho problému použijte jeden nebo několik následujících kroků pro zmírnění potíží.

Problémy během modulu runtime skupiny kontejnerů

Kontejner měl izolované restartování bez explicitního vstupu uživatele.

Existují dvě obecné kategorie, proč se skupina kontejnerů může restartovat bez explicitního vstupu uživatele. Za prvé, kontejnery můžou narazit na restartování způsobené chybou procesu aplikace. Služba ACI doporučuje použít řešení pozorovatelnosti, jako jsou sada Application Insights SDK, metriky skupin kontejnerů a protokoly skupin kontejnerů, a určit, proč k aplikacím došlo k problémům. Za druhé, zákazníci můžou kvůli událostem údržby zaznamenat restartování iniciované infrastrukturou ACI. Pokud chcete zvýšit dostupnost aplikace, spusťte několik skupin kontejnerů za komponentou příchozího přenosu dat, jako je Application Gateway nebo Traffic Manager.

Kontejner se průběžně zastavuje a restartuje (bez dlouhotrvajícího procesu)

Skupiny kontejnerů mají výchozí zásady restartování always, takže kontejnery ve skupině kontejnerů se po dokončení vždy restartují. Pokud máte v úmyslu spouštět kontejnery založené na úlohách, budete možná muset tuto možnost změnit na OnFailure nebo Never . Pokud zadáte OnFailure a stále dochází k průběžnému restartování, může dojít k problému s aplikací nebo skriptem spuštěným v kontejneru.

Když spouštíte skupiny kontejnerů bez dlouhotrvajících procesů, může se zobrazit opakované ukončení a restartování s imagemi, jako je Ubuntu nebo Alpine. Připojení přes EXEC nebude fungovat, protože kontejner nemá žádný proces, který by ho udržel naživu. Pokud chcete tento problém vyřešit, zahrňte spouštěcí příkaz podobný následujícímu příkladu s nasazením skupiny kontejnerů, aby byl kontejner spuštěný.

## Deploying a Linux container
az container create -g MyResourceGroup --name myapp --image ubuntu --command-line "tail -f /dev/null"
## Deploying a Windows container
az container create -g myResourceGroup --name mywindowsapp --os-type Windows --image mcr.microsoft.com/windows/servercore:ltsc2019
 --command-line "ping -t localhost"

Rozhraní API služby Container Instances a Azure Portal obsahují restartCount vlastnost. Pokud chcete zkontrolovat počet restartování kontejneru, můžete použít příkaz az container show v Azure CLI. V následujícím příkladu výstupu, který jsme zkrátili kvůli stručnosti, uvidíte restartCount vlastnost na konci výstupu.

...
 "events": [
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:06+00:00",
     "lastTimestamp": "2017-11-13T21:20:06+00:00",
     "message": "Pulling: pulling image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Pulled: Successfully pulled image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Created: Created container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Started: Started container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   }
 ],
 "previousState": null,
 "restartCount": 0
...
}

Poznámka:

Většina imagí kontejnerů pro linuxové distribuce nastaví prostředí, jako je bash, jako výchozí příkaz. Vzhledem k tomu, že prostředí sama o sobě není dlouhotrvající služba, tyto kontejnery okamžitě ukončí a při konfiguraci s výchozí zásadou always restartu přejdou do smyčky restartování.

Spuštění kontejneru trvá dlouhou dobu

Tři hlavní faktory, které přispívají k době spuštění kontejneru ve službě Azure Container Instances, jsou:

Image Windows mají další aspekty.

Velikost obrázku

Pokud spuštění kontejneru trvá dlouho, ale nakonec proběhne úspěšně, začněte tím, že se podíváte na velikost image kontejneru. Vzhledem k tomu, že služba Azure Container Instances načítá image kontejneru na vyžádání, čas spuštění, který vidíte, souvisí přímo s jeho velikostí.

Velikost image kontejneru můžete zobrazit pomocí docker images příkazu v rozhraní příkazového řádku Dockeru:

docker images
REPOSITORY                                    TAG       IMAGE ID        CREATED          SIZE
mcr.microsoft.com/azuredocs/aci-helloworld    latest    7367f3256b41    15 months ago    67.6MB

Klíčem k zachování malých velikostí obrázků je zajistit, aby finální image neobsahovávali nic, co není potřeba za běhu. Jedním ze způsobů, jak to udělat, je s vícefázovými sestaveními. Vícefázové sestavení usnadňují zajištění toho, aby konečná image obsahovala pouze artefakty, které potřebujete pro vaši aplikaci, a ne žádný další obsah potřebný v době sestavení.

Umístění obrázku

Dalším způsobem, jak snížit dopad vyžádání image na dobu spuštění kontejneru, je hostování image kontejneru ve službě Azure Container Registry ve stejné oblasti, ve které chcete nasadit instance kontejneru. Tím se zkracuje síťová cesta, kterou potřebuje image kontejneru cestovat, což výrazně zkracuje dobu stahování.

Image uložené v mezipaměti

Azure Container Instances používá mechanismus ukládání do mezipaměti, který pomáhá zrychlit dobu spouštění kontejnerů pro image založené na běžných základních imagích Windows, včetně nanoserver:1809servercore:ltsc2019servercore:1809a . Běžně používané image Linuxu, jako ubuntu:1604 jsou a alpine:3.6 jsou také uložené v mezipaměti. U imagí Windows i Linuxu nepoužívejte latest značku. Pokyny najdete v osvědčených postupech značek imagí služby Container Registry. Pro aktuální seznam imagí a značek uložených v mezipaměti použijte rozhraní API Pro výpis obrázků uložených v mezipaměti.

Poznámka:

Použití imagí založených na Windows Serveru 2019 ve službě Azure Container Instances je ve verzi Preview.

Pomalé síťové připravenosti kontejnerů Windows

Při počátečním vytvoření nemusí kontejnery Windows obsahovat příchozí ani odchozí připojení po dobu až 30 sekund (nebo déle, ve výjimečných případech). Pokud vaše aplikace kontejneru potřebuje připojení k internetu, přidejte logiku zpoždění a opakování, která umožňuje 30 sekund navázat připojení k internetu. Po počátečním nastavení by se sítě kontejnerů měly odpovídajícím způsobem obnovit.

Nejde se připojit k podkladovému rozhraní API Dockeru nebo spustit privilegované kontejnery

Azure Container Instances nezpřístupňuje přímý přístup k podkladové infrastruktuře, která hostuje skupiny kontejnerů. To zahrnuje přístup k modulu runtime kontejneru, technologii orchestrace a spouštění privilegovaných operací kontejneru. Pokud chcete zjistit, jaké operace ACI podporuje, projděte si referenční dokumentaci k REST. Pokud něco chybí, odešlete žádost na fórech pro zpětnou vazbu ACI.

IP adresa skupiny kontejnerů nemusí být dostupná kvůli neshodě portů

Azure Container Instances zatím nepodporuje mapování portů, jako je běžná konfigurace Dockeru. Pokud zjistíte, že IP adresa skupiny kontejnerů není přístupná, pokud se domníváte, že by měla být, ujistěte se, že jste nakonfigurovali image kontejneru tak, aby naslouchala stejným portům, které zveřejňujete ve skupině kontejnerů s ports vlastností.

Pokud chcete potvrdit, že služba Azure Container Instances může naslouchat na portu, který jste nakonfigurovali v imagi kontejneru, otestujte nasazení aci-helloworld image, která port zveřejňuje. Spusťte aci-helloworld také aplikaci, aby naslouchala na portu. aci-helloworld přijímá volitelnou proměnnou PORT prostředí, která přepíše výchozí port 80, na který naslouchá. Pokud chcete například otestovat port 9000, nastavte proměnnou prostředí při vytváření skupiny kontejnerů:

  1. Nastavte skupinu kontejnerů tak, aby zpřístupnil port 9000, a jako hodnotu proměnné prostředí předejte číslo portu. Příklad je naformátován pro prostředí Bash. Pokud dáváte přednost jinému prostředí, jako je PowerShell nebo příkazový řádek, musíte odpovídajícím způsobem upravit přiřazení proměnných.

    az container create --resource-group myResourceGroup \
    --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --ip-address Public --ports 9000 \
    --environment-variables 'PORT'='9000'
    
  2. Ve výstupu příkazu ve výstupu az container createpříkazu vyhledejte IP adresu skupiny kontejnerů . Vyhledejte hodnotu IP.

  3. Po úspěšném zřízení kontejneru přejděte v prohlížeči na IP adresu a port aplikace kontejneru, například: 192.0.2.0:9000.

    Měla by se zobrazit zpráva Vítá vás služba Azure Container Instances! zobrazená webovou aplikací.

  4. Až s kontejnerem skončíte, odeberte ho az container delete pomocí příkazu:

    az container delete --resource-group myResourceGroup --name mycontainer
    

Problémy při nasazení důvěrných skupin kontejnerů

Chyby zásad při používání vlastních zásad CCE

Vlastní zásady CCE musí být vygenerované rozšíření Confcom pro Azure CLI. Před generováním zásad zajistěte, aby všechny vlastnosti zadané v šabloně ARM byly platné a odpovídaly tomu, co očekáváte v zásadách důvěrného computingu. Mezi vlastnosti, které se mají ověřit, patří image kontejneru, proměnné prostředí, připojení svazků a příkazy kontejneru.

Chybějící hodnota hash ze zásad

Rozšíření Confcom v Azure CLI používá image uložené v mezipaměti na místním počítači, které nemusí odpovídat těm, které jsou k dispozici vzdáleně, což může vést k neshodě vrstev při ověření zásady. Ujistěte se, že odeberete všechny staré image a stáhnete nejnovější image kontejneru do místního prostředí. Jakmile budete mít jistotu, že máte nejnovější sha, měli byste znovu vygenerovat zásady CCE.

Proces/kontejner ukončený ukončovacím kódem: 139

K tomuto ukončovacímu kódu dochází kvůli omezením základní image Ubuntu verze 22.04. K vyřešení tohoto problému doporučujeme použít jinou základní image.

Další kroky

Naučte se načítat protokoly a události kontejnerů, které vám pomůžou ladit kontejnery.