docker stop grzecznie zatrzymuje działający kontener. Najpierw wysyła do głównego procesu (PID 1) sygnał SIGTERM, żeby aplikacja mogła się posprzątać — zamknąć połączenia, dopisać do pliku, zwolnić zasoby. Jeśli proces nie wyłączy się w wyznaczonym czasie (domyślnie 10 sekund), Docker traci cierpliwość i dobija kontener twardym SIGKILL. To podstawowy sposób na wyłączanie kontenerów, gdy chcesz dać im szansę na łagodne zejście, a nie wyrwać wtyczkę z gniazdka.
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak:
docker stop [OPCJE] KONTENER [KONTENER...]
-t, --time— liczba sekund oczekiwania międzySIGTERMaSIGKILL(domyślnie 10). Daj więcej czasu aplikacjom, które długo się zamykają.-s, --signal— sygnał wysyłany zamiast domyślnegoSIGTERM(np.SIGINT). Przydatne, gdy aplikacja reaguje na inny sygnał.- Kontener możesz wskazać po nazwie albo po ID (wystarczy unikalny prefiks skrótu).
- Podasz kilka kontenerów po spacji — Docker zatrzyma je po kolei.
Domyślny sygnał bierze się z instrukcji STOPSIGNAL w obrazie (lub --stop-signal ustawionego przy tworzeniu kontenera), o ile nie nadpiszesz go flagą -s.
Przykłady użycia
docker stop web— zatrzymuje kontener o nazwiewebz domyślnym 10-sekundowym oknem na sprzątanie.docker stop 4f2a— zatrzymuje kontener po prefiksie jego ID, gdy nie chce ci się przepisywać całego skrótu.docker stop db cache worker— wyłącza trzy kontenery jednym poleceniem.docker stop -t 30 postgres— daje bazie aż 30 sekund na bezpieczne domknięcie zanim padnieSIGKILL.docker stop $(docker ps -q)— zatrzymuje wszystkie aktualnie działające kontenery (lista ID zdocker ps -q).
Częste błędy i pułapki
Najczęstsza pomyłka to mylenie docker stop z docker kill. stop jest uprzejmy i daje czas na sprzątanie, kill od razu wali SIGKILL bez ostrzeżenia. Jeśli zależy ci na integralności danych, używaj stop.
Druga pułapka: jeśli twoja aplikacja w ogóle nie reaguje na SIGTERM (bo np. działa jako podproces shella, który nie przekazuje sygnałów), to i tak będziesz czekać pełne 10 sekund, a potem dostaniesz twardy SIGKILL — z utratą niezapisanych danych. Zadbaj, by twój proces był PID 1 i obsługiwał sygnały, albo użyj --init przy starcie kontenera.
Pamiętaj też, że docker stop tylko zatrzymuje kontener — nie usuwa go. Kontener nadal istnieje (zobaczysz go w docker ps -a) i możesz go wskrzesić poleceniem docker start.
Powiązane komendy: docker start, docker restart, docker kill, docker rm, docker ps, docker pause.