GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak používat zásady restartování Dockeru k udržení běžících kontejnerů

Docker vám nabízí několik možností, jak spravovat životní cyklus vašeho kontejneru. Kontejnery se obvykle po ukončení automaticky nerestartují. Pomocí zásad restartování můžete převzít kontrolu nad jednotlivými životními cykly kontejnerů.

Zásady restartu se použijí vždy, když se kontejner přestane spouštět. Docker se také podívá na zásady restartování při spuštění démona. Pomocí tohoto mechanismu můžete kontejnery po restartu přivést k hostiteli.

Zásady dostupnosti

Aktuálně existují čtyři různé zásady restartování:

  • no – Tato zásada nikdy automaticky nespustí kontejner. Toto je výchozí zásada pro všechny kontejnery vytvořené pomocí docker run .
  • always – Docker zajistí, že kontejner vždy běží. Pokud se kontejner zastaví, bude okamžitě restartován. Kontejner můžete stále ručně zastavit pomocí docker stop ale Docker jej při příštím restartu démona znovu spustí.
  • on-failure – Kontejner se restartuje, pokud se zastaví kvůli chybě. Po restartování démona Docker kontejner nevyvolá.
  • unless-stopped – Funguje podobně jako always . Rozdíl je v tom, že Docker nikdy nerestartuje kontejner, pokud byl ručně zastaven.

Pro produkční úlohy obvykle použijete jednu z posledních tří možností. Protože se kontejnery Docker často používají pro dlouhotrvající služby na pozadí, obvykle chcete, aby se restartovaly, kdykoli se něco pokazí. no politika je nejvhodnější pro místní rozvoj. Je to také užitečné pro kontejnery nástrojů, které spouštějí jeden spustitelný soubor a poté se ukončí.

Může být obtížné rozhodnout, kterou zásadu restartu použít. always je často nejpřirozenější volbou, ale chování restartování démona lze snadno přehlédnout. Pokud chcete, aby kontejnery po spuštění docker stop spolehlivě zůstaly zastavené , měli byste použít unless-stopped .

Docker zjišťuje chyby na základě výstupního kódu vysílaného z procesu na popředí kontejneru. Výstupní kód 1 nebo vyšší je interpretováno jako chyba. To odpovídá unixovému zpracování výstupních kódů, kde je pouze 0 představuje úspěšné provedení.

Když Docker restartuje váš kontejner, je to ekvivalentní spuštění docker run znovu. To znamená ENTRYPOINT obrázku skript bude vyvolán. Bootstrap systémy by měly být vždy odolné vůči vícenásobným vyvoláním.

Uplatnění zásad restartování

Kontejner s konkrétní zásadou restartování můžete spustit předáním --restart příznak pro docker run :

docker run --name httpd --restart always httpd:latest

Pokud používáte Docker Compose, přidejte restart pole do vašeho docker-compose.yml :

services:
  httpd:
    image: httpd:latest
    restart: always

Zásadu restartování existujícího kontejneru můžete změnit pomocí docker update . Předejte příkazu název kontejneru. Názvy kontejnerů najdete spuštěním docker ps -a .

docker update --restart-policy unless-stopped httpd

Můžete použít docker update s kontejnery, které jsou spuštěné nebo zastavené.

Restartovat smyčky

Docker obsahuje několik zabezpečení proti neustálým restartům. První je povinná časová prodleva před aktivací zásad restartu. Docker nezačne monitorovat restarty, dokud kontejner neběží alespoň 10 sekund. To zabrání tomu, aby se kontejner, který selhal, neustále restartoval.

Další chování specialistů se týká docker stop příkaz. Docker bude vždy respektovat použití docker stop , takže kontejner se po spuštění příkazu okamžitě nerestartuje. Pokud skutečně chcete restartovat kontejner, použijte docker restart místo toho.

Omezení opakování restartu

on-failure Zásada restartu vám umožňuje určit, o kolik opakování se má pokusit. Docker se vzdá a ponechá kontejner v zastaveném stavu, pokud se nepodaří spustit několikrát za sebou.

docker run httpd:latest --restart on-failure:5

V tomto příkladu se Docker pokusí restartovat kontejner pětkrát po selhání (nenulový výstupní kód). Pokud se kontejner nespustí ani na pátý pokus, další pokusy se již nebudou opakovat. Tato možnost je užitečná pro kontejnery, kde je nepravděpodobné, že by trvalá chyba spouštění byla vyřešena bez ručního zásahu.

Vyšetřování, proč se kontejnery zastavily

Pokud potřebujete vědět, proč se kontejner zastavil, spusťte docker ps -a . Zobrazí se podrobnosti o všech vašich kontejnerech, ať už zastavených nebo spuštěných. Najděte cílový kontejner a podívejte se do jeho sloupce „Stav“. U zastavených kontejnerů bude výstupní kód uveden v závorkách. Pokud je kód větší než nula, kontejner byl ukončen kvůli chybě.

Chcete-li zjistit význam jednotlivých chybových kódů, musíte se podívat do dokumentace procesu spuštěného v kontejneru. Často však můžete získat informace o tom, co způsobilo selhání, načtením protokolů kontejneru. Protokoly zůstávají dostupné i po zastavení kontejneru.

docker logs my-container

Proud protokolu agreguje standardní výstup kontejneru a standardní chybové proudy. Pokud byla chyba zaznamenána, měli byste očekávat, že ji uvidíte na posledních několika řádcích výstupu.

Přehled

Zásady restartování pomáhají zajistit, aby vaše kontejnery Docker byly k dispozici, když je potřebujete. Výchozí no politika je nevhodná pro většinu produkčních úloh. Nechcete, aby vaše kontejnery zůstaly zastaveny, pokud havarují!

Použití jedné ze tří zásad umožňujících restartování činí vaše kontejnery odolnějšími vůči restartování hardwaru a neočekávanému ukončení. Docker zachová dostupnost služby v případě havárie kontejneru.


Docker
  1. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

  2. Jak používat Docker Compose

  3. Jak vypsat Docker kontejnery

  1. Jak automaticky aktualizovat běžící kontejnery Docker

  2. Jak udržet kontejnery Docker v chodu, když se démon zastaví

  3. Jak spustit příkaz na spuštěném kontejneru Docker

  1. Jak sdílet data mezi kontejnery Docker

  2. Jak zálohovat a obnovovat kontejnery Docker

  3. Jak pozastavit a obnovit kontejnery Docker