docker restart

Zatrzymuje i ponownie uruchamia kontener.

docker restart to polecenie, które zatrzymuje działający kontener i od razu uruchamia go ponownie — czyli klasyczne „wyłącz i włącz”. Pod spodem robi to samo co docker stop i docker container start jednym ruchem: wysyła do procesu sygnał zatrzymania, czeka chwilę aż się grzecznie zamknie, a potem startuje go z powrotem z tą samą konfiguracją (te same wolumeny, sieci, zmienne środowiskowe). Przydaje się, gdy aplikacja w kontenerze zawiesiła się, zjadła wszystkie zasoby albo gdy podmieniłeś plik konfiguracyjny montowany do środka i chcesz, żeby usługa wczytała go od nowa.

Składnia i najważniejsze opcje

Podstawowa forma wygląda tak: docker restart [OPCJE] KONTENER [KONTENER...]. Kontener wskazujesz po nazwie albo po ID (wystarczy kilka pierwszych znaków). Najważniejsze flagi:

  • -t, --time — liczba sekund oczekiwania na łagodne zatrzymanie, zanim kontener dostanie SIGKILL. Domyślnie 10.
  • -s, --signal — sygnał wysyłany do procesu, np. SIGTERM albo SIGINT. Domyślnie używany jest StopSignal z obrazu, a jeśli go nie ma — SIGTERM.

To w zasadzie cały zestaw — docker restart jest celowo ubogie w opcje, bo cała magia konfiguracji dzieje się przy docker run. Pamiętaj też, że obie składnie działają: krótsza docker restart i pełna docker container restart robią dokładnie to samo.

Przykłady użycia

  • docker restart web — restartuje kontener o nazwie web z domyślnym czasem oczekiwania 10 sekund.
  • docker restart web db cache — restartuje kilka kontenerów naraz, jeden po drugim.
  • docker restart -t 30 web — daje aplikacji aż 30 sekund na czyste zamknięcie (np. dokończenie zapisu do bazy), zanim zostanie ubita.
  • docker restart -t 0 web — natychmiastowy, twardy restart bez czekania na łagodne zamknięcie. Szybko, ale aplikacja nie zdąży posprzątać.
  • docker restart $(docker ps -q) — restartuje wszystkie aktualnie działające kontenery (pomaga docker ps -q zwracające same ID).

Częste błędy i pułapki

Najczęstsza pomyłka: ludzie liczą, że restart wczyta nowy obraz. Nie wczyta. docker restart używa tej samej warstwy obrazu, z którą kontener był stworzony — jeśli zbudowałeś nową wersję, musisz usunąć kontener i postawić go na nowo (docker rm + docker run albo docker compose up -d). Druga pułapka: zmienne środowiskowe i porty ustawiasz tylko przy docker run, restart ich nie zmieni.

Uważaj na zbyt krótki -t przy bazach danych i kolejkach — ubicie procesu SIGKILL w trakcie zapisu potrafi zostawić uszkodzone dane. Wreszcie: jeśli kontener jest w trybie --restart=always, ręczny restart i tak zadziała, ale daemon może go też podnosić sam — nie pomyl tego z awarią.

Powiązane komendy: docker stop, docker start, docker ps, docker logs, docker kill oraz docker compose restart.