Посібники/Як зупинити контейнери Docker

Як зупинити контейнери Docker на Mac — один або всі

Atta 🐬

Засновник Vitals

Опубліковано

Коротка відповідь

Щоб зупинити один контейнер Docker, виконайте docker stop з його назвою або ID; docker ps показує їх список. Щоб зупинити всі запущені контейнери, виконайте docker stop $(docker ps -q). У проєкті Compose docker compose stop зупиняє його контейнери, а docker compose down ще й видаляє їх. docker stop просить контейнер завершити роботу і примусово зупиняє його через 10 секунд. Контейнер, який запускається знову, має політику перезапуску; вимкніть її командою docker update --restart=no. Vitals, системний монітор для Mac, зупиняє контейнери зі смуги меню: список «Контейнери» показує памʼять кожного, а одне клацання зупиняє контейнер після підтвердження.

Як зупинити контейнери Docker з Термінала

  1. 01 Виконайте docker ps, щоб побачити список запущених контейнерів з їхніми назвами та ID.
  2. 02 Зупиніть один контейнер командою docker stop з його назвою, наприклад docker stop web-1. В одній команді можна вказати кілька контейнерів.
  3. 03 Зупиніть усі запущені контейнери командою docker stop $(docker ps -q). docker ps -q виводить лише ID, а docker stop приймає їх усі.
  4. 04 Для проєкту Compose виконайте docker compose stop у його папці, щоб зупинити його сервіси, або docker compose down, щоб зупинити їх і видалити контейнери та мережу проєкту. Томи лишаються, якщо не додати -v.
  5. 05 Знову виконайте docker ps. Якщо контейнер досі в списку, він ще завершує роботу, а якщо він зʼявився знову за мить — у нього є політика перезапуску.

Ті самі команди працюють з OrbStack, Colima і Rancher Desktop, коли команда docker вказує на них. У Podman є podman stop, а podman stop -a зупиняє всі контейнери.

Зупинка контейнера завершує його процеси й зберігає все інше — файли, параметри й томи — для docker start. Тому це безпечний спосіб повернути памʼять і процесор від контейнера, яким ви не користуєтеся. Таблиця нижче порівнює зупинку з командами, до яких зазвичай вдаються поряд із нею.

docker stop, kill, pause, rm і compose down

КомандаЩо вона робитьКоли використовувати
docker stop Надсилає SIGTERM, а через 10 секунд — SIGKILL Майже завжди: програма встигає завершити запис і закрити зʼєднання
docker kill Одразу надсилає SIGKILL Контейнер ігнорує docker stop
docker pause Заморожує процеси, які зберігають свою памʼять Вам треба на час повернути процесор, а не памʼять
docker rm Видаляє зупинений контейнер або запущений з -f Він вам більше не потрібен; іменовані томи лишаються
docker compose stop Зупиняє контейнери проєкту й зберігає їх Ви скоро знову запустите той самий проєкт
docker compose down Зупиняє й видаляє контейнери та мережу Ви хочете наступного разу почати з чистого аркуша; додайте -v, щоб видалити й томи

Чому зупинений контейнер знову запускається

Контейнер із політикою перезапуску Docker запускає знову. З always зупинений вами контейнер повертається під час наступного запуску Docker Desktop, тож контейнери, які ви зупинили вчора, після перезавантаження знову працюють. З unless-stopped зупинений контейнер лишається зупиненим. У файлах Compose restart: always часто задають для баз даних і кешів.

Щоб побачити політику контейнера, виконайте docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' з його назвою. Щоб вимкнути її, виконайте docker update --restart=no з назвою або змініть restart: у файлі Compose.

Коли docker stop триває 10 секунд

Після SIGTERM docker stop чекає, доки завершиться головний процес контейнера. Процес, який ігнорує сигнал, — часто це shell-скрипт, що не передає його далі, — затримує зупинку на всі 10 секунд, доки Docker не завершить його примусово. docker stop -t 2 скорочує очікування. Якщо виправити образ, контейнер зупинятиметься одразу: запускайте програму через exec у скрипті entrypoint або задайте init: true для сервісу в Compose.

Зупинка контейнерів і повернення памʼяті

На Mac контейнери працюють в одній віртуальній машині Linux. Їхня зупинка звільняє памʼять усередині неї, але віртуальна машина може й далі тримати цю памʼять, тож Монітор активності може досі показувати великий Virtual Machine Service for Docker. Resource Saver або завершення Docker Desktop повертає її macOS; параметри див. у статті Docker використовує забагато памʼяті.

Зупинка контейнерів без Термінала

У поданні Containers у Docker Desktop є кнопка Stop для кожного контейнера й кожного проєкту Compose. Вона у вікні Docker Desktop, тож для цього треба відкрити програму. Програми для смуги меню, як-от Captain, показують контейнери під значком у смузі меню з кнопками запуску й зупинки для кожного. Vitals робить те саме зі смуги меню і додає те, чого жодна з них не показує: скільки памʼяті й процесора використовує кожен контейнер, щоб ви знали, який зупинити.

Що додає Vitals

Vitals зупиняє контейнери зі смуги меню Mac, показуючи їхню памʼять.

  • Список «Контейнери» в спадній панелі: кожен запущений контейнер з його проєктом Compose, образом і смугою памʼяті
  • Наведіть на контейнер вказівник і клацніть ×, що зʼявиться. Рядок попросить підтвердження, а потім зупинить контейнер так само, як docker stop, з 10 секундами на завершення роботи
  • У вкладці «Контейнери» у вікні виберіть кілька контейнерів і клацніть, утримуючи Control, щоб зупинити їх разом, або клацніть проєкт Compose, утримуючи Control, і виберіть «Зупинити всі»
  • Памʼять, процесор, мережа, диск і опубліковані порти кожного контейнера в Docker Desktop, OrbStack, Colima, Rancher Desktop і Podman

Варто знати

  • Vitals запитує, перш ніж щось зупинити, і ніколи не запускає, не видаляє й не змінює контейнери.
  • Контейнер із політикою перезапуску рушій може запустити знову. Вікно попереджає про це, коли запитує.
  • Якщо рушій відмовляє або не відповідає, у рядку буде сказано, що контейнер досі працює.
  • Список «Контейнери» зʼявляється, коли працює рушій.
Отримати Vitals за $15 $9 за рік оновлень або $15 назавжди під час запуску, $39 після. Одна оплата, повернення коштів протягом 14 днів.

Що питають люди

Як зупинити всі контейнери Docker одразу?

Виконайте docker stop $(docker ps -q). Команда отримує ID кожного запущеного контейнера й зупиняє кожен. У Vitals виберіть їх у вкладці «Контейнери» і клацніть, утримуючи Control, щоб зупинити разом.

Чим відрізняються docker stop і docker kill?

docker stop надсилає SIGTERM і чекає до 10 секунд, перш ніж примусово зупинити контейнер сигналом SIGKILL. docker kill одразу надсилає SIGKILL, тож програма не встигає завершити запис чи закрити зʼєднання.

Чим відрізняються docker compose stop і down?

docker compose stop зупиняє контейнери й зберігає їх для docker compose start. docker compose down зупиняє їх і видаляє контейнери та мережу проєкту; томи лишаються, якщо не додати -v.

Чому контейнер Docker знову запускається після зупинки?

У нього політика перезапуску always, тож Docker запускає його знову під час запуску Docker Desktop. Виконайте docker update --restart=no з його назвою або змініть restart: у файлі Compose.

Чи видаляє зупинка контейнера його дані?

Ні. Зупинений контейнер зберігає свої файли й томи, а docker start запускає його знову. docker rm видаляє контейнер; іменовані томи лишаються, доки ви їх не видалите.

Чи можна зупиняти контейнери Docker зі смуги меню Mac?

Так, за допомогою Vitals. Спадна панель у смузі меню показує запущені контейнери з їхньою памʼяттю, а одне клацання зупиняє контейнер після підтвердження. Це працює з Docker Desktop, OrbStack, Colima, Rancher Desktop і Podman.

У глосарії

Інші посібники