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

V tomto článku se dozvíte, jak řešit běžné problémy se správou nebo nasazením kontejnerů do Azure Container Instances. Viz také Nejčastější dotazy.

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

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

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

Při definování specifikace kontejneru některé parametry vyžadují dodržování omezení pojmenování. Níže je tabulka se specifickými požadavky na vlastnosti skupiny kontejnerů. Další informace najdete v tématech Zásady vytváření názvů v Centru architektury Azure a Pravidla a omezení vytváření názvů pro prostředky Azure.

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

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

Nepodporovaná verze image operačního systému

Pokud zadáte obrázek, který Azure Container Instances nepodporuje, OsVersionNotSupported vrátí se chyba. Chyba se podobá následující chybě, 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, které jsou založené na Semi-Annual channel verze 1709 nebo 1803, které nejsou podporovány. Informace o podporovaných imagích Windows v Azure Container Instances najdete v tématu Nejčastější dotazy.

Nelze načíst image

Pokud Azure Container Instances zpočátku nemůže obrázek načíst, pokusí se ji po nějakou dobu znovu načíst. Pokud operace vyžádání image dál selhává, 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 že jste správně zadali název image.

Pokud image nejde načíst, ve výstupu az container show se zobrazí podobné události:

"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 Prostředek není k dispozici

Kvůli různým místnímu zatížení prostředků v Azure se může při pokusu o nasazení instance kontejneru 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 z důvodu velkého zatížení v oblasti, ve které se pokoušíte nasadit, není možné prostředky zadané pro váš kontejner v tuto chvíli přidělit. Při řešení problému použijte jeden nebo více následujících kroků pro zmírnění rizik.

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 docházet k restartování způsobenému chybou procesu aplikace. Služba ACI doporučuje použít řešení pozorovatelnosti, jako je sada Application Insights SDK, metriky skupin kontejnerů a protokoly skupin kontejnerů , a určit, proč u aplikace došlo k problémům. Za druhé, zákazníci můžou zaznamenat restartování iniciovaná infrastrukturou ACI kvůli událostem údržby. 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í ve výchozím nastavení zásadu restartováníAlways, takže kontejnery ve skupině kontejnerů se vždy restartují po spuštění do dokončení. Pokud chcete spouštět kontejnery založené na úlohách, možná budete muset tuto možnost změnit na OnFailure nebo Never . Pokud zadáte OnFailure a stále dochází k neustálému restartování, může dojít k problému s aplikací nebo skriptem spuštěným ve vašem kontejneru.

Při spouštění skupin kontejnerů bez dlouhotrvajících procesů se můžou opakovat 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ý ho udržuje při životě. Pokud chcete tento problém vyřešit, připojte k nasazení skupiny kontejnerů spouštěcí příkaz podobný následujícímu, 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 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ý byl zkrácen pro stručnost) můžete vidět 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í kontejneru pro linuxové distribuce nastaví jako výchozí příkaz prostředí, jako je bash. Vzhledem k tomu, že prostředí samo o sobě není dlouhotrvající službou, tyto kontejnery se okamžitě ukončí a přejdou do smyčky restartování, pokud jsou nakonfigurované s výchozí zásadou Vždy restartovat.

Spuštění kontejneru trvá dlouhou dobu

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

Image Windows mají další důležité informace.

Velikost obrázku

Pokud spuštění kontejneru trvá dlouho, ale nakonec uspěje, začněte tím, že se podíváte na velikost image kontejneru. Vzhledem k tomu, že Azure Container Instances na vyžádání stáhne image kontejneru, čas spuštění, který uvidíte, přímo souvisí s její 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í imagí je zajistit, aby finální image neobsahovávali nic, co se za běhu nevyžaduje. Jedním ze způsobů, jak to udělat, je vícefázová sestavení. 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, který byl vyžadován v době sestavení.

Umístění obrázku

Dalším způsobem, jak snížit dopad vyžádání image na čas spuštění kontejneru, je hostovat image kontejneru v Azure Container Registry ve stejné oblasti, ve které chcete nasadit instance kontejneru. Tím se zkrátí síťová cesta, kterou image kontejneru potřebuje, a výrazně se tím zkrátí doba stahování.

Image uložené v mezipaměti

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

Poznámka

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

Pomalé připravenosti k síti pro kontejnery Windows

Při počátečním vytvoření nemusí mít kontejnery Windows příchozí ani odchozí připojení po dobu až 30 sekund (ve výjimečných případech i déle). Pokud vaše aplikace kontejneru potřebuje připojení k internetu, přidejte logiku zpoždění a opakování, aby bylo možné navázat připojení k internetu po dobu 30 sekund. 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 základní infrastruktuře, která je hostitelem skupin 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, podívejte se do referenční dokumentace k REST. Pokud něco chybí, odešlete žádost ve 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 u běžné konfigurace Dockeru. Pokud zjistíte, že IP adresa skupiny kontejnerů není přístupná, když se domníváte, že by měla být, ujistěte se, že jste image kontejneru nakonfigurovali tak, aby naslouchala stejným portům, které zveřejňujete ve skupině kontejnerů s ports vlastností .

Pokud chcete ověřit, že 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 tak, 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řístupnila port 9000, a předejte číslo portu jako hodnotu proměnné prostředí. Příklad je formátovaný pro prostředí Bash. Pokud dáváte přednost jinému prostředí, jako je PowerShell nebo Příkazový řádek, budete muset 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. Najděte IP adresu skupiny kontejnerů ve výstupu az container createpříkazu . 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.

    Webová aplikace by měla zobrazit zprávu Vítá vás Azure Container Instances!.

  4. Až kontejner dokončíte, odeberte ho pomocí az container delete 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 je potřeba vygenerovat v rozšíření Azure CLI confcom. Před generováním zásad se ujistěte, že všechny vlastnosti zadané v šabloně ARM jsou platné a odpovídají tomu, co očekáváte v zásadách důvěrného výpočetního prostředí. Mezi vlastnosti, které je potřeba ověřit, patří image kontejneru, proměnné prostředí, připojení svazků a příkazy kontejneru.

Chybějící hodnota hash v zásadách

Rozšíření Confcom Azure CLI bude používat image uložené v mezipaměti na místním počítači, které se nemusí shodovat s těmi, které jsou k dispozici vzdáleně, což může při ověření zásad vést k neshodě vrstev. Ujistěte se, že jste odebrali všechny staré image a stáhli 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ý s 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

Zjistěte, jak načíst protokoly kontejneru a události, které vám pomůžou ladit kontejnery.