Як налагоджувати Docker-контейнери на Debian 13 | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Як налагоджувати Docker-контейнери на Debian 13

Вступ

У цьому туторіалі ви навчитеся налагоджувати Docker-контейнери, використовуючи практичні та зрозумілі для початківців техніки. Ви визначатимете проблеми шляхом перевірки стану контейнера, аналізу логів, інспекції конфігурації та доступу до середовища контейнера. Такий підхід допомагає швидко зрозуміти, чому контейнер не працює, і як це виправити.

Кінцева мета: Після завершення цього туторіалу ви зможете виявляти та усувати типові проблеми Docker-контейнерів за допомогою логів, інспекції та інструментів аналізу під час виконання.

Передумови

  • Цільова аудиторія: системні адміністратори початківці
  • Оцінений час: ~30 хвилин
  • Операційна система: Debian 13
  • Програмне забезпечення: Docker 24.0 або новіше
  • Права доступу: Користувач із правами sudo або член групи docker
  • Вимоги до обладнання: Щонайменше 2 GB RAM та 10 GB вільного дискового простору
  • Мережеві вимоги: Доступ до Інтернету для завантаження образів, спеціальні порти не потрібні
  • Вимоги: Базові навички роботи з командним рядком та запущений сервіс Docker
  • Сумісність: Протестовано на Debian 13, також працює на Debian 12 та Ubuntu 22.04

Крок 1: Перевірка інформації про систему Docker

Перед налагодженням конкретного контейнера переконайтеся, що сам Docker працює коректно.
Виконайте команду:

docker system info

Ви побачите детальну інформацію про середовище Docker, зокрема:

  • Версія сервера
  • Драйвер зберігання
  • Кількість контейнерів та образів
  • Доступність CPU та памʼяті
  • Коренева директорія Docker

Це допомагає підтвердити, що:

  • Docker працює коректно
  • Система має достатньо ресурсів
  • Відсутні глобальні проблеми конфігурації

Info

Якщо Docker не запущений, ви можете побачити помилку на кшталт "Cannot connect to the Docker daemon".

Щоб перевірити стан сервісу Docker:

systemctl status docker

Ви побачите, чи активний сервіс Docker. Якщо він не запущений, запустіть його:

sudo systemctl start docker

Тепер ви маєте побачити сервіс у стані active.

Tip

Завжди перевіряйте стан Docker перед налагодженням контейнерів. Багато проблем із контейнерами спричинені проблемами сервісу Docker або системного рівня.

Крок 2: Перевірка стану контейнера

Виконайте команду:

docker ps

Ви побачите список запущених контейнерів із деталями, такими як ID контейнера, образ та статус. Якщо ваш контейнер має статус "Up", він зараз працює.

Щоб відобразити зупинені контейнери:

docker ps -a

Тепер ви побачите всі контейнери. Якщо ваш контейнер має статус "Exited", це означає, що він зупинився через помилку або завершив виконання.

Info

Контейнер зупиняється, коли завершується його основний процес. Це нормальна поведінка, але часто вказує на проблему, якщо завершення було неочікуваним.

Крок 3: Перегляд логів контейнера

Логи показують, що виводить застосунок всередині контейнера. Це найважливіший крок для налагодження. Ви можете отримати <CONTAINER_ID> за допомогою команди docker ps, описаної в кроці 2.

Виконайте:

docker logs <CONTAINER_ID>

Ви побачите вивід застосунку, включно з помилками та попередженнями. Шукайте повідомлення, що вказують на збої, такі як відсутні файли або помилки зʼєднання.

Щоб відстежувати логи в реальному часі:

docker logs -f <CONTAINER_ID>

Ви бачитимете нові записи логів по мірі їх появи. Це корисно під час перезапуску контейнера та спостереження за його поведінкою.

Щоб переглянути лише останні записи:

docker logs --tail 50 <CONTAINER_ID>

Ви побачите останні 50 рядків виводу. Це допомагає зосередитися на найсвіжіших подіях.

Tip

Починайте з останніх логів, а потім переглядайте повні логи за потреби.

Крок 4: Інспекція стану контейнера

Docker зберігає детальну інформацію про кожен контейнер.

Виконайте:

docker inspect <CONTAINER_ID>

Ви побачите структурований JSON-вивід із деталями конфігурації та виконання.

Щоб перевірити статус контейнера:

docker inspect -f '{{.State.Status}}' <CONTAINER_ID>

Ви побачите просте значення, наприклад "running" або "exited", що підтверджує стан контейнера.

Щоб перевірити код завершення:

docker inspect -f '{{.State.ExitCode}}' <CONTAINER_ID>

Ви побачите число. Значення 0 означає успіх, тоді як будь-яке ненульове значення вказує на помилку.

Щоб перевірити політику перезапуску:

docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <CONTAINER_ID>

Ви побачите, чи налаштовано автоматичний перезапуск контейнера.

Info

Коди завершення допомагають зрозуміти, чому контейнер зупинився. Коли контейнер завершується, основний процес повертає системі числовий код.

Типові коди завершення:

  • 0 – Процес завершився успішно без помилок. Зазвичай це означає, що контейнер зупинився нормально. Наприклад, скрипт виконав завдання та завершився.
  • 1 – Сталася загальна помилка. Це найпоширеніший код помилки і зазвичай означає, що щось у застосунку не спрацювало, наприклад відсутній файл, некоректна конфігурація або помилка під час виконання.
  • 125 – Docker не зміг запустити контейнер. Зазвичай це означає проблему з командою docker run, наприклад некоректні опції або параметри.
  • 126 – Команда всередині контейнера не може бути виконана. Часто це означає проблему з правами доступу або те, що файл не є виконуваним.
  • 127 – Команду не знайдено. Зазвичай це означає, що вказаний бінарний файл або скрипт відсутній у контейнері.
  • 137 – Контейнер був примусово зупинений. Часто це відбувається, коли системі не вистачає памʼяті і вона завершила процес контейнера.
  • 139 – Контейнер завершився з помилкою сегментації. Це свідчить про серйозну помилку застосунку, зазвичай повʼязану з доступом до памʼяті.
  • 143 – Контейнер був коректно зупинений. Зазвичай це відбувається після виконання docker stop.

Tip

Спочатку зосередьтеся на кодах 1, 127 та 137, оскільки вони найпоширеніші під час усунення проблем. Завжди поєднуйте код завершення з docker logs, щоб зрозуміти точну причину збою.

Крок 5: Доступ до середовища контейнера

Іноді логів недостатньо. Ви можете зайти в контейнер для прямої перевірки.

Виконайте:

docker exec -it <CONTAINER_ID> /bin/bash

Ви потрапите в інтерактивну оболонку всередині контейнера.

Якщо bash недоступний:

docker exec -it <CONTAINER_ID> /bin/sh

Тепер ви можете досліджувати контейнер.

Перевірка процесів контейнера з хоста:

docker top <CONTAINER_ID>

Ви побачите активні процеси всередині контейнера. Якщо основний процес відсутній, контейнер може зупинятися.

Tip

Перевіряйте конфігураційні файли та тестуйте команди вручну всередині контейнера.

Крок 6: Моніторинг використання ресурсів

Контейнери можуть завершуватися через обмеження ресурсів.

Виконайте:

docker stats

Ви побачите використання CPU, памʼяті та мережі в реальному часі для всіх контейнерів.

Щоб моніторити конкретний контейнер:

docker stats <CONTAINER_ID>

Ви побачите таблицю з використанням ресурсів для всіх запущених контейнерів, що постійно оновлюється. Кожен рядок представляє контейнер, а кожен стовпець – тип використання ресурсу.
Найважливіші стовпці:

  • CPU % – Показує, скільки CPU використовує контейнер. Високі значення можуть свідчити про інтенсивні обчислення або неефективний код.
  • MEM USAGE / LIMIT – Показує використання памʼяті відносно ліміту. Якщо значення близьке до ліміту, контейнер може сповільнюватися або зупинитися.
  • MEM % – Відсоток використання памʼяті відносно ліміту.
  • NET I/O – Мережевий трафік. Показує, скільки даних контейнер отримав і передав. Високі значення можуть свідчити про інтенсивну мережеву активність.
  • BLOCK I/O – Дискові операції читання та запису. Показує, скільки даних контейнер прочитав і записав на диск.
  • PIDs – Кількість процесів у контейнері. Дуже велике значення може свідчити про витік процесів або неконтрольований застосунок.

Info

Якщо BLOCK I/O постійно зростає, контейнер активно використовує сховище. Це нормально для баз даних, але неочікувані піки можуть свідчити про неефективне використання диска або надмірне логування. Під час налагодження звертайте увагу на аномальні піки CPU, памʼяті або BLOCK I/O. Поєднуйте ці дані з docker logs, щоб зрозуміти, що відбувається в цей момент.

Крок 7: Перевірка подій Docker

Docker фіксує події, які описують, що відбувається на рівні системи та контейнерів. Ці події допомагають зрозуміти, коли контейнер запускається, зупиняється, падає або перезапускається.
Виконайте команду:

docker events

Ви побачите потік подій у реальному часі, таких як запуск, зупинка та перезапуск контейнера. Вивід постійно оновлюється.

Info

Натисніть Ctrl + C, щоб зупинити потік.

Фільтрація подій для конкретного контейнера

Виконайте:

docker events --filter container=<CONTAINER_ID>

Ви побачите лише події, повʼязані з вибраним контейнером. Це допомагає зосередитися на одному навантаженні.

Перегляд подій за певний період

Щоб переглянути події з певного моменту:

docker events --since 10m

Ви побачите події за останні 10 хвилин.

Щоб задати початковий і кінцевий час:

docker events --since 2026-01-01T10:00:00 --until 2026-01-01T11:00:00

Ви побачите події в цьому часовому діапазоні.

Info

Можна використовувати відносний час, наприклад 10m, 1h, або повні часові мітки.

Форматування виводу подій

Виконайте:

docker events --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.ID}}'

Ви побачите відформатований вивід із вибраними полями. Це полегшує читання або інтеграцію зі скриптами.

Tip

Використовуйте форматування, щоб відображати лише потрібну інформацію під час налагодження.

Фільтрація типів подій

Можна фільтрувати події для зосередження на конкретних проблемах.

Зупинка або збій контейнера

Виконайте:

docker events --filter event=die

Ви побачите події зупинки контейнерів. Це допомагає виявити неочікувані завершення.

Події нестачі памʼяті

Виконайте:

docker events --filter event=oom

Ви побачите події, коли контейнер був завершений через обмеження памʼяті. Це критично для діагностики ресурсних проблем.

Info

OOM означає Out Of Memory. Система зупиняє контейнер, коли він перевищує доступну памʼять.

Перезапуски контейнера

Виконайте:

docker events --filter event=restart

Ви побачите події перезапуску контейнерів. Часті перезапуски можуть свідчити про цикл збоїв.

Комбінація фільтрів і часу

Виконайте:

docker events --since 10m --filter event=die

Ви побачите події зупинки контейнерів за останні 10 хвилин. Це допомагає звузити пошук недавніх збоїв.

Tip

Комбінуйте фільтри та часові діапазони, щоб швидко виявляти патерни, наприклад повторювані збої або проблеми з памʼяттю.

Крок 8: Перевірка використання диска та очищення невикористаних образів

Docker зберігає образи, контейнери, томи та кеш на диску. З часом невикористані дані можуть займати значний обсяг і спричиняти проблеми.

Виконайте команду:

docker system df

Ви побачите зведення використання диска, включно з:

  • Образами
  • Контейнерами
  • Локальними томами
  • Кешем збірки

Кожен розділ показує:

  • Загальну кількість
  • Активні елементи
  • Розмір
  • Можливий для очищення обсяг

Це допомагає зрозуміти, скільки місця використовує Docker і скільки можна звільнити.

Info

Стовпець "Reclaimable" показує, скільки місця можна звільнити, видаливши невикористані ресурси.

Щоб переглянути невикористані образи:

docker images -f dangling=true

Ви побачите образи без тегів, які не використовуються жодним контейнером. Їх можна безпечно видаляти.

Щоб видалити невикористані образи:

docker image prune

Буде запит на підтвердження. Після підтвердження невикористані образи буде видалено і місце на диску звільниться.

Щоб видалити всі невикористані образи, не лише dangling:

docker image prune -a

Ви видалите всі образи, які не використовуються жодним контейнером.

Info

Важливо: Ця команда видаляє образи, які можуть знадобитися пізніше. Переконайтеся, що жодні потрібні контейнери від них не залежать.

Tip

Регулярне очищення допомагає уникнути проблем із дисковим простором, які можуть спричинити збої контейнерів або нестабільну поведінку.

Перевірка та тестування

  • Виконайте docker ps і переконайтеся, що стан контейнера коректний.
  • Виконайте docker logs і перевірте, що помилки виявлені або усунені.
  • Виконайте docker inspect і переконайтеся, що статус і код завершення відповідають очікуванням.
  • Використайте docker exec, щоб підтвердити, що процеси всередині контейнера працюють.
  • Якщо налагодження виконано успішно, контейнер має залишатися у стані running без критичних помилок у логах.

Відкат змін

Якщо ви внесли зміни під час налагодження, ви можете відновити чистий стан.

Tip

Створіть резервну копію важливих даних перед видаленням контейнерів.

Зупинити контейнер:

docker stop <CONTAINER_ID>

Ви побачите підтвердження, що контейнер зупинено.

Видалити контейнер:

docker rm <CONTAINER_ID>

Ви побачите підтвердження, що контейнер видалено.

Створити контейнер заново:

docker run <OPTIONS> <IMAGE_NAME>

Буде створено новий контейнер з образу.

Info

Важливо: Видалення контейнера видаляє його стан під час виконання. Дані буде втрачено, якщо вони не збережені у томах.

Усунення несправностей

Контейнер одразу завершується

Перевірте docker logs на наявність повідомлень про помилки. Зазвичай вони пояснюють проблему.

Неможливо отримати доступ до контейнера

Переконайтеся, що він запущений, за допомогою docker ps.

Логи відсутні

Переконайтеся, що застосунок пише в stdout або stderr.

Контейнер постійно перезапускається

Перевірте політику перезапуску та логи, щоб виявити цикл збоїв.

Високе використання ресурсів

Використовуйте docker stats, щоб підтвердити піки CPU або памʼяті.

Висновок

Ви навчилися налагоджувати Docker-контейнери, перевіряючи їх стан, аналізуючи логи, інспектуючи конфігурацію та отримуючи доступ до середовища контейнера. Ці техніки дозволяють швидко виявляти та усувати типові проблеми. Наступний крок – дослідити налагодження Docker Compose та системи централізованого логування для керування кількома контейнерами.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA