docker pause / docker unpause în Docker

Containere Docker 1.0+

Îngheață toate procesele unui container (fără să le oprească) și le reia exact din același punct.

Sintaxă comandă
docker pause <container> [<container>...]
docker unpause <container> [<container>...]

Ce face docker pause / docker unpause

docker pause suspendă toate procesele din container folosind mecanismul freezer din cgroups pe Linux. Procesele nu primesc niciun semnal și nu știu că au fost oprite: rămân în memorie, dar nu mai primesc timp de procesor. docker unpause le reia din același punct.

Diferența față de docker stop: la stop, procesul se termină și pornește de la zero la docker start; la pause, starea din memorie se păstrează. E util pentru a elibera temporar procesorul, pentru a face o copie consistentă a fișierelor sau în teste. Un container în pauză apare în docker ps cu starea (Paused).

Parametri

Parametru Descriere
docker pause CONTAINER Suspendă toate procesele containerului.
docker unpause CONTAINER Reia procesele suspendate.
docker ps --filter status=paused Listează containerele aflate în pauză.

Exemple

Exemplul 1: Pauză pentru un job care consumă procesorul

Raportul lunar ocupă procesorul în timpul zilei; îl punem în pauză și îl reluăm seara.

docker pause raport-lunar
docker ps --filter name=raport-lunar --format '{{.Names}}\t{{.Status}}'
docker unpause raport-lunar
docker ps --filter name=raport-lunar --format '{{.Names}}\t{{.Status}}'

Ieșire în terminal

raport-lunar
raport-lunar	Up 47 minutes (Paused)
raport-lunar
raport-lunar	Up 47 minutes

Exemplul 2: Comenzile nu merg într-un container în pauză

Nici docker exec nu poate porni procese noi cât timp containerul este înghețat.

docker pause raport-lunar
docker exec raport-lunar ls

Ieșire în terminal

raport-lunar
Error response from daemon: Container 6e1f3a9c2b7d4e8f0a5c1b3d7e9f2a4c6b8d0e1f3a5c7b9d2e4f6a8c0b1d3e5f is paused, unpause the container before exec

Greșeli frecvente

  • Folosirea lui pause ca să eliberezi memorie: procesele înghețate își păstrează toată memoria. Pentru a o elibera, oprește containerul.
  • Lăsarea în pauză a unui serviciu din spatele unui load balancer: conexiunile nu sunt refuzate, ci rămân agățate până la timeout.

Comenzi înrudite

  • docker update: Modifică din mers limitele de CPU și memorie sau politica de repornire a unui container, fără să-l recreezi.
  • docker wait: Așteaptă oprirea unuia sau mai multor containere și afișează codul de ieșire al fiecăruia.
  • docker attach: Conectează terminalul tău la intrarea, ieșirea și erorile procesului principal al unui container care rulează.