Problemen met het stoppen van Docker-containers? Het vinden van de juiste manier om een container te stoppen is moeilijk met de mogelijkheid om vele verschillende containers te maken. In dit artikel leer je Docker-commando’s om een container of alle containers te stoppen.
Lees verder om er meer over te leren!
Vereisten
Om deze handleiding te volgen, zorg ervoor dat je het volgende hebt:
- Windows 10 – Deze handleiding gebruikt Windows om Docker uit te voeren, maar je kunt dezelfde algemene stappen ook toepassen op Linux of macOS.
- Docker Desktop – Deze handleiding gebruikt versie 3.5.2. De Docker-engine is beschikbaar als je op Linux bent, omdat de GUI dat niet is.
- A running Docker container or containers.
Containers beëindigen met het Docker-stopcontainers-commando
Laten we beginnen met het eerste commando: het docker stop
containers-commando en hoe het containers stopt.
Stel dat je bijvoorbeeld een actieve container met de naam mystifying_hofstadter
en een ID van fb66ed502096
wilt stoppen. Zoals getoond in het onderstaande voorbeeld, stop de container met het docker stop
containers-commando.

Wat als je meerdere actieve containers hebt en je die wilt stoppen? Het docker stop
containers commando ondersteunt het stoppen van meerdere container-ID’s, één voor één.
Eerst, lijst alle containers op via het docker ps
commando en geef de container-ID’s door aan het docker stop
containers commando, zoals hieronder getoond.

Wat als je alle actieve containers wilt stoppen zonder de container-ID’s handmatig op te halen en die door te geven aan docker stop
? Het docker ps -q
commando zal dat bereiken. De -q
parameter van het docker ps
commando geeft alleen de ID’s van de containers weer.

De constructie
$(docker ps -q)
hierboven is een subexpressie zowel in Bash op Linux als in PowerShell op Windows. Een subexpressie instrueert de shell om eerst één set commando’s,docker ps -q
, te verwerken en vervolgens de set resultaten terug te geven aan het oorspronkelijke commandodocker stop
.
Het docker stop
containers-commando gebruikt het SIGTERM-signaal. Linux-signalen informeren een proces over een gebeurtenis, maar het is aan het proces om te beslissen hoe te reageren op een gegeven signaal.
Bij gebruik van het SIGTERM-signaal gebruikt Docker het signaal om een proces op een nette manier te stoppen door standaard 10
seconden te wachten voordat het het SIGKILL-signaal verzendt, dat het proces onmiddellijk beëindigt.
Het stoppen van een container met proces-signalen
U heeft geleerd over het standaardgedrag van Docker (stop-signaal), met het docker stop
containers-commando, bij het stoppen van een container. Maar u wilt mogelijk niet het standaardgedrag. In plaats daarvan kunt u Docker instrueren om alternatieve stopsignalen te gebruiken.
Met de --stop-signal
-vlag van de docker run
-opdrachten kunt u het stopsignaal specificeren bij het starten van de container. Deze vlag stelt het signaal in dat naar de draaiende container wordt verzonden wanneer u wilt dat deze stopt.
In het onderstaande voorbeeld neemt de vlag --stop-signaal
de waarde SIGQUIT
aan, wat Docker vertelt om het SIGQUIT-signaal te verzenden wanneer het tijd is om de container te stoppen. Het voorbeeld gebruikt ook de volgende parameters:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- “image-naam” – Welke Docker-image moet worden gebruikt voor het aanmaken van de container, in dit geval de
ubuntu
-image.

SIGQUIT
as the signal when starting and then stopping a Docker container. U kunt ook het stopsignaal specificeren met behulp van een Dockerfile, wat Docker vertelt hoe een container moet worden gebouwd. U kunt een invoer toevoegen aan de Dockerfile waarin het stopsignaal wordt gespecificeerd met
STOPSIGNAL SIGQUIT
, bijvoorbeeld. U kuntSIGQUIT
vervangen door elk stopsignaal dat u wilt.
Direct Containers Afsluiten met docker kill
Er zullen momenten zijn waarop u containers wilt afsluiten zonder ze een gratieperiode te geven. Het docker kill
-commando stopt onmiddellijk een container.
In het onderstaande voorbeeld wordt de container met ID 2aa318273db5
doorgegeven aan docker kill
. De container zal onmiddellijk worden afgesloten via het SIGKILL-signaal. De container zal niet worden toegestaan om op een gracieuze manier af te sluiten. Als gevolg van het commando zal de container afsluiten en de ID van de container zal worden getoond.
Alle containers afsluiten met het commando
docker kill $(docker ps -q)
. Let op dat(docker ps -q
) hier een subexpressie is.
Een Container Stoppen en Verwijderen met docker rm
Standaard wordt, wanneer je een container creëert, die container op dezelfde manier gebouwd als voorheen: het is idempotent. Het verwijderen van een container zal minimale impact hebben, en met dat in gedachten kan `docker rm` een container force-stoppen en verwijderen. Docker geeft een `SIGKILL` signaal aan het hoofdproces en verwijdert de container uit de lijst van beschikbare containers op je Docker-installatie.
Als de container de gewijzigde interne bestanden moet behouden of als de staat ervan behouden moet blijven, dan zal het verwijderen van een container die wijzigingen vernietigen. Wees op je hoede voor mogelijke problemen!
In het volgende voorbeeld heb je misschien een container gestart die de naam `kind_galileo` kreeg toegewezen. Voordat je een container verwijdert, moet de container gestopt worden, zoals hieronder wordt getoond. Het `docker ps -a` commando geeft de status `Exited` weer voor de voorbeeldcontainer.

Nu de container is gestopt, zal het uitvoeren van het `docker rm` commando de container volledig verwijderen.
In plaats van de container te stoppen en vervolgens te verwijderen, zal de combinatie van `–force` en `docker rm` de container in één bewerking stoppen en verwijderen. De container, `laughing_elion`, zal niet langer beschikbaar zijn om uit te voeren.
Als je het `–force` commando niet specificeert, krijg je de foutmelding `Error response from daemon: You cannot remove a running container…`

Containers stoppen met Docker Compose
Docker-opdrachten worden typisch gebruikt op een enkele container, maar je kunt een service maken met meerdere containers die samenwerken. De Docker Compose-tool stelt je in staat om een service te configureren die bestaat uit meerdere containers die samenwerken.
Omdat de containers binnen een service zijn ontworpen om samen te werken, is het het beste om de hele service zelf goed af te sluiten in plaats van een individuele container.
Als je een service hebt draaien met meerdere containers, stopt [docker-compose stop]
de service zonder de containers of de service te verwijderen. Volg hieronder om een Docker Compose-service te maken, de service te starten en uiteindelijk de service op een goede manier te stoppen.
1. Maak een map aan om je configuratiebestand op te slaan. In dit voorbeeld wordt het bestand opgeslagen in de map C:\Artikelen\Ubuntu.
2. Maak vervolgens het bestand docker-compose.yml aan, met de volgende configuratie. Het onderstaande Docker Compose-bestand maakt een service met twee Ubuntu-containers, en wanneer ze worden gestart, sluiten de containers niet meteen af.
3. In een terminalsessie, navigeer naar je aangepaste Docker-configuratiebestandsmap, die in dit voorbeeld C:\Artikelen\Ubuntu is. Voer het docker-compose up -d
uit om de service te genereren en te starten die in de vorige stap is aangemaakt op de achtergrond zoals aangegeven door de -d
-optie.

4. In dezelfde terminalsessie en map, geef het commando docker-compose stop
om de service en containers op een nette manier te beëindigen.

De
docker-compose
-opdracht heeft, net als dedocker
-opdracht, ook de parametersrm --force
enkill
. De parameters vandocker-compose
werken op de service in plaats van op een enkele container. Hetdocker-compose kill
-commando neemt ook een optie-s
om het stopsignaal te specificeren.
Conclusie
Docker-containers zijn een krachtig hulpmiddel om unieke en gesegmenteerde omgevingen te creëren voor ontwikkeling en productiegebruik. In dit artikel heb je verschillende manieren geleerd waarop Docker één of meer, zelfs alle, containers stopt. Je hebt ook geleerd over het standaard stopsig-naal dat Docker gebruikt en hoe je het kunt wijzigen.
Met deze kennis weet je nu alles over het stoppen van Docker-containers en hoe je niet de mist in gaat wanneer het tijd is om actieve containers te stoppen. Hoe plan je nu om je containers te stoppen, nu je deze nieuwe kennis hebt?
Source:
https://adamtheautomator.com/docker-stop-containers/