Máte potíže s kontejnery Docker stop? Nalezení správného způsobu, jak zastavit kontejner, je obtížné se schopností vytvořit mnoho různých kontejnerů. V tomto článku se naučíte příkazy Dockeru k zastavení kontejneru nebo všech kontejnerů.
Čtěte dále a dozvíte se více!
Předpoklady
Chcete-li pokračovat v tomto tutoriálu, ujistěte se, že máte následující:
- Windows 10 – Výukový program používá ke spuštění Dockeru Windows, ale stejné obecné kroky můžete použít také pro Linux nebo macOS.
- Docker Desktop – Tento tutoriál používá verzi 3.5.2. Docker Engine je k dispozici, pokud používáte Linux, zatímco GUI není.
- Spuštěný kontejner nebo kontejnery Docker.
Ukončení kontejnerů pomocí příkazu Kontejnery zastavení ukotvitelného panelu
Začněme prvním příkazem:docker stop
kontejnery a jak zastavuje kontejnery.
Například možná potřebujete zastavit běžící kontejner s názvem mystifying_hofstadter
a ID fb66ed502096
. Jak ukazuje příklad níže, zastavte kontejner pomocí docker stop
příkaz kontejnery.
# Stop the container via the name
docker stop mystifying_hofstadter
# Stop the container via the ID (same container)
docker stop fb66ed50209
Co když máte několik běžících kontejnerů a chtěli byste je zastavit? docker stop
Příkaz kontejnery podporuje zastavení více ID kontejnerů, jedno po druhém.
Nejprve vytvořte seznam všech kontejnerů pomocí docker ps
a předejte ID kontejneru docker stop
kontejnery, jak je znázorněno níže.
# List all running containers
docker ps
# Stop the following Docker containers via the container ID
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e
Co když chcete zastavit všechny běžící kontejnery, aniž byste museli ručně získávat ID kontejnerů a předávat je docker stop
? docker ps -q
příkaz to splní. -q
parametr docker ps
příkaz vypíše pouze ID kontejnerů.
# Create three containers. A semi-colon separates each command
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# List all running containers
docker ps -q
# Retrieve all running container IDs and pass those to docker stop
docker stop $(docker ps -q)
The
$(docker ps -q)
konstrukt výše je podvýraz v Bash na Linuxu a PowerShell na Windows. Dílčí výraz dává příkazu shellu zpracovat jednu sadu příkazů,docker ps -q
, nejprve a poté vraťte sadu výsledků k původnímu příkazudocker stop
.
docker stop
Příkaz kontejnery používá signál SIGTERM. Signály Linuxu informují proces o události, ale je na procesu, aby rozhodl, jak na daný signál zareaguje.
Při použití signálu SIGTERM používá Docker signál k řádnému zastavení procesu čekáním na výchozí 10
sekund před odesláním signálu SIGKILL, který proces okamžitě ukončí.
Zastavení kontejneru pomocí procesních signálů
O výchozím chování Dockeru (signál zastavení) jste se dozvěděli pomocí docker stop
příkaz container, při zastavování kontejneru. Možná ale nebudete chtít výchozí chování. Místo toho můžete dát pokyn Dockeru, aby používal alternativní signály zastavení.
Pomocí docker run
příkazy --stop-signal
příznak, můžete určit stop signál při spouštění kontejneru. Tento příznak nastavuje signál, který bude odeslán do běžícího kontejneru, když chcete, aby se zastavil.
V níže uvedeném příkladu --stop-signal
flag má hodnotu SIGQUIT
, který říká Dockeru, aby poslal signál SIGQUIT, když je čas zastavit kontejner. V příkladu jsou také použity následující parametry:
d
– Spustí kontejner v odděleném režimu (na pozadí). Odpojený režim neumožní uživateli okamžitou interakci s kontejnerem, protože proces běží na pozadí.t
– alokuje konzoli Pseudo-TTY (PTY), která emuluje skutečnou terminálovou konzoli v kontejneru a zabrání okamžitému ukončení kontejneru Ubuntu. Kontejner Ubuntu v příkladu vyžaduje konzoli PTY, aby zůstala aktivní na pozadí.- „název obrázku“ – z jakého obrázku Dockeru se má kontejner poskytnout, v tomto případě z
ubuntu
obrázek.
docker run -d -t --stop-signal SIGQUIT ubuntu
Můžete také určit signál zastavení pomocí souboru Dockerfile, který Dockeru řekne, jak vytvořit kontejner. Do Dockerfile můžete přidat záznam specifikující signál zastavení pomocí
STOPSIGNAL SIGQUIT
, například. Můžete přepnoutSIGQUIT
s jakýmkoli signálem zastavení, který byste chtěli.
Okamžité opuštění kontejnerů pomocí docker kill
Nastanou chvíle, kdy budete chtít kontejnery opustit, aniž byste jim poskytli období odkladu. docker kill
příkaz okamžitě zastaví kontejner.
Níže uvedený příklad předává kontejner s ID 2aa318273db5
k docker kill
. Kontejner okamžitě opustí signál SIGKILL. Kontejneru nebude umožněn ladný výjezd. V důsledku příkazu se kontejner ukončí a zobrazí se ID kontejneru.
docker kill 2aa318273db5
Docker zabije všechny kontejnery pomocí příkazu
docker kill $(docker ps -q)
. Všimněte si, že(docker ps -q
) je zde podvýraz.
Zastavení a odebrání kontejneru pomocí docker rm
Ve výchozím nastavení, když vytvoříte kontejner, je tento kontejner vytvořen stejně jako předtím:je idempotentní. Odstranění kontejneru bude mít minimální dopad a s ohledem na to docker rm
může násilně zastavit a vyjmout nádobu. Docker vydá SIGKILL
signál do hlavního procesu a odebere kontejner ze seznamu dostupných kontejnerů ve vaší instalaci Dockeru.
Pokud si kontejner musí ponechat změněné interní soubory nebo musí být zachován jeho stav, odstranění kontejneru tyto změny zničí. Dejte si pozor na potenciální překlepy!
V následujícím příkladu jste možná spustili kontejner, kterému byl přiřazen název kind_galileo
. Před vyjmutím nádoby je nutné nádobu zastavit, jak je znázorněno níže. docker ps -a
příkaz zobrazuje stav Exited
pro příklad kontejneru.
Nyní, když kontejner přestal vydávat docker rm
příkaz zcela odstraní kontejner.
docker rm kind_galileo
Místo zastavení kontejneru a následného odstranění kontejneru použijte kombinaci --force
a docker rm
zastaví a odstraní nádobu v jediné operaci. Kontejner laughing_elion
, již nebude možné spustit.
docker rm --force laughing_elion
Pokud nezadáte
--force
příkazem, objeví se chybová zprávaError response from daemon: You cannot remove a running container...
Zastavení kontejnerů Docker pomocí Docker Compose
Příkazy Dockeru se obvykle používají na jednom kontejneru, ale můžete vytvořit službu s více kontejnery, které budou vzájemně spolupracovat. Nástroj Docker Compose vám umožňuje nakonfigurovat službu složenou z více kontejnerů, aby spolupracovaly.
Vzhledem k tomu, že kontejnery ve službě jsou navrženy tak, aby spolupracovaly, je nejlepší ladně zastavit celou službu, nikoli jednotlivé kontejnery.
Pokud máte službu spuštěnou s více kontejnery, [docker-compose stop]
zastaví službu, aniž by odstranil kontejnery nebo službu. Postupujte podle níže uvedených pokynů a vytvořte službu Docker Compose, spusťte službu a nakonec ji elegantně zastavte.
1. Vytvořte adresář pro uložení konfiguračního souboru. V tomto příkladu adresář C:\Articles\Ubuntu uloží soubor.
mkdir C:\Articles\Ubuntu
2. Dále vytvořte soubor docker-compose.yml soubor obsahující následující konfiguraci. Níže uvedený soubor Docker Compose vytváří službu se dvěma kontejnery Ubuntu, a když je vyvolán, kontejnery se okamžitě neukončí.
# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
# First Ubuntu Container
container1:
image: ubuntu
# Same as the -t option and allocates a Psuedo-TTY, so the container does not immediately exit.
tty: true
# Second Ubuntu Container
container2:
image: ubuntu
tty: true
3. V terminálové relaci přejděte do svého vlastního adresáře konfiguračního souboru Docker, což je v tomto příkladu C:\Articles\Ubuntu . Spusťte docker-compose up -d
vygenerovat a spustit službu vytvořenou v předchozím kroku na pozadí, jak je označeno -d
volba.
4. Ve stejné relaci terminálu a adresáři zadejte příkaz docker-compose stop
ukončit službu a kontejnery elegantně.
docker-compose
příkaz, jako jedocker
má takérm --force
akill
parametry.docker-compose
parametry fungují na službě namísto jednoho kontejneru.docker-compose kill
příkaz také přebírá volbu-s
možnost specifikovat signál zastavení.
Závěr
Docker kontejnery jsou mocným nástrojem pro vytváření jedinečných a segmentovaných prostředí pro vývojové a produkční použití. V tomto článku jste se dozvěděli několik způsobů, jak Docker zastaví jeden nebo více, dokonce všechny kontejnery. Také jste se dozvěděli o výchozím signálu zastavení, který Docker používá, a o tom, jak jej změnit.
S těmito znalostmi nyní víte, jak zastavovat kontejnery Docker a jak se nepodělat, když je čas zastavit provoz kontejnerů. Jak od této chvíle plánujete zastavit své kontejnery, když máte tyto nově nalezené znalosti?