Gidsen/Zo stop je Docker-containers

Zo stop je Docker-containers op een Mac, één of allemaal

Atta 🐬

Oprichter van Vitals

Gepubliceerd

Kort antwoord

Om één Docker-container te stoppen, voer je docker stop uit gevolgd door de naam of ID; docker ps geeft een lijst. Om elke draaiende container te stoppen, voer je docker stop $(docker ps -q) uit. In een Compose-project stopt docker compose stop de containers en verwijdert docker compose down ze ook. docker stop vraagt de container af te sluiten en dwingt hem na 10 seconden. Een container die terugkomt, heeft een restart policy; zet die uit met docker update --restart=no. Vitals, een systeemmonitor voor de Mac, stopt containers vanuit de menubalk: de lijst Containers toont het geheugen van elke container, en met één klik stop je er een nadat Vitals het je heeft gevraagd.

Zo stop je Docker-containers vanuit Terminal

  1. 01 Voer docker ps uit voor een lijst van de draaiende containers, met hun namen en ID’s.
  2. 02 Stop er een met docker stop en de naam, bijvoorbeeld docker stop web-1. Je kunt er meerdere in één opdracht noemen.
  3. 03 Stop elke draaiende container met docker stop $(docker ps -q). docker ps -q geeft alleen de ID’s, en docker stop neemt ze allemaal.
  4. 04 Voer bij een Compose-project docker compose stop uit in de map ervan om de services te stoppen, of docker compose down om ze te stoppen en de containers en het netwerk van het project te verwijderen. Volumes blijven, tenzij je -v toevoegt.
  5. 05 Voer docker ps opnieuw uit. Een container die er nog staat, is nog aan het afsluiten, en een die even later terug is, heeft een restart policy.

Dezelfde opdrachten werken met OrbStack, Colima en Rancher Desktop als de opdracht docker ernaar wijst. Podman heeft podman stop, en podman stop -a stopt ze allemaal.

Een container stoppen beëindigt zijn processen en bewaart al het andere, zijn bestanden, instellingen en volumes, klaar voor docker start. Daardoor is het de veilige manier om geheugen en CPU terug te krijgen van een container die je niet gebruikt. De tabel hieronder vergelijkt het met de opdrachten die mensen ernaast gebruiken.

docker stop, kill, pause, rm en compose down

OpdrachtWat het doetGebruik het als
docker stop Stuurt SIGTERM, en na 10 seconden SIGKILL Bijna altijd: de app kan klaar zijn met schrijven en zijn verbindingen sluiten
docker kill Stuurt meteen SIGKILL Een container negeert docker stop
docker pause Bevriest de processen, die hun geheugen houden Je wilt de CPU een tijdje terug, niet het geheugen
docker rm Verwijdert een gestopte container, of met -f een draaiende Je bent er klaar mee; benoemde volumes blijven
docker compose stop Stopt de containers van een project en bewaart ze Je start hetzelfde project binnenkort weer
docker compose down Stopt en verwijdert de containers en het netwerk Je wilt de volgende keer schoon beginnen; voeg -v toe om ook volumes te verwijderen

Waarom een gestopte container opnieuw start

Een container met een restart policy wordt door Docker opnieuw gestart. Met always komt een container die je hebt gestopt terug de volgende keer dat Docker Desktop start, dus containers die je gisteren stopte, draaien na een herstart weer. Met unless-stopped blijft een container die je stopte, gestopt. Compose-bestanden zetten vaak restart: always op databases en caches.

Om de policy van een container te zien, voer je docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' uit gevolgd door de naam. Om hem uit te zetten, voer je docker update --restart=no uit met de naam, of verander je restart: in het Compose-bestand.

Als docker stop 10 seconden duurt

docker stop wacht na SIGTERM tot het hoofdproces van de container stopt. Een proces dat het signaal negeert, vaak een shellscript dat het niet doorgeeft, houdt het stoppen de volle 10 seconden op voordat Docker het afschiet. docker stop -t 2 maakt het wachten korter. Pas je de image aan, dan stopt hij meteen: start de app met exec in het entrypoint-script, of zet init: true op de service in Compose.

Containers stoppen, en het geheugen terugkrijgen

Op een Mac draaien containers in één virtuele Linux-machine. Stop je ze, dan komt hun geheugen daarbinnen vrij, maar de virtuele machine kan dat geheugen blijven vasthouden, dus Activiteitenweergave kan nog steeds een grote Virtual Machine Service for Docker tonen. Resource Saver, of Docker Desktop stoppen, geeft het terug aan macOS; zie Docker gebruikt te veel geheugen voor de instellingen.

Containers stoppen zonder Terminal

De weergave Containers van Docker Desktop heeft een Stop-knop bij elke container en bij elk Compose-project. Die staat in het venster van Docker Desktop, dus je opent de app om hem te gebruiken. Menubalkapps zoals Captain tonen de containers onder een symbool in de menubalk, met starten en stoppen voor elke container. Vitals doet hetzelfde vanuit zijn menubalk, en voegt toe wat geen van hen laat zien: hoeveel geheugen en CPU elke container gebruikt, zodat je weet welke je moet stoppen.

Wat Vitals toevoegt

Vitals stopt containers vanuit de menubalk van de Mac, met hun geheugen in beeld.

  • De lijst Containers in het uitklapmenu: elke draaiende container met zijn Compose-project, zijn image en een balk voor zijn geheugen
  • Wijs er een aan en klik op de × die verschijnt. De regel vraagt om bevestiging en stopt hem dan zoals docker stop doet, met 10 seconden om af te sluiten
  • Selecteer op het tabblad Containers van het venster er meerdere en Control-klik om ze samen te stoppen, of Control-klik op een Compose-project en kies ‘Stop alles’
  • Geheugen, CPU, netwerk, schijf en gepubliceerde poorten voor elke container, met Docker Desktop, OrbStack, Colima, Rancher Desktop en Podman

Goed om te weten

  • Vitals vraagt het je voordat het iets stopt, en start, verwijdert of wijzigt nooit een container.
  • Een container met een restart policy kan door zijn engine opnieuw worden gestart. Het venster zegt dat erbij als het om bevestiging vraagt.
  • Weigert de engine of antwoordt hij niet, dan zegt de regel dat de container nog draait.
  • De lijst Containers verschijnt zolang er een engine draait.
Koop Vitals voor $9 $9 tijdens de lancering, daarna $29. 14 dagen geld terug.

Vragen die mensen stellen

Hoe stop ik alle Docker-containers tegelijk?

Voer docker stop $(docker ps -q) uit. Dat geeft de ID’s van elke draaiende container en stopt ze allemaal. Selecteer ze in Vitals op het tabblad Containers en Control-klik om ze samen te stoppen.

Wat is het verschil tussen docker stop en docker kill?

docker stop stuurt SIGTERM en wacht tot 10 seconden voordat het de container met SIGKILL dwingt. docker kill stuurt meteen SIGKILL, dus de app krijgt geen kans om klaar te zijn met schrijven of zijn verbindingen te sluiten.

Wat is het verschil tussen docker compose stop en down?

docker compose stop stopt de containers en bewaart ze, klaar voor docker compose start. docker compose down stopt ze en verwijdert de containers en het netwerk van het project; volumes blijven, tenzij je -v toevoegt.

Waarom start mijn Docker-container opnieuw nadat ik hem heb gestopt?

Hij heeft de restart policy always, dus Docker start hem opnieuw als Docker Desktop start. Voer docker update --restart=no uit met de naam, of verander restart: in het Compose-bestand.

Verwijdert een container stoppen zijn gegevens?

Nee. Een gestopte container houdt zijn bestanden en volumes, en docker start draait hem opnieuw. docker rm verwijdert de container; benoemde volumes blijven tot je ze verwijdert.

Kan ik Docker-containers stoppen vanuit de menubalk van de Mac?

Ja, met Vitals. Het uitklapmenu in de menubalk toont de draaiende containers met hun geheugen, en met één klik stop je een container nadat Vitals het je heeft gevraagd. Het werkt met Docker Desktop, OrbStack, Colima, Rancher Desktop en Podman.

In de woordenlijst

Meer gidsen