Як ефективно переглядати журнали Docker та керувати ними?

Під час роботи з Docker журнали контейнерів є одним з основних інструментів діагностики. Саме через них фахівець бачить, чи коректно запускається застосунок, які помилки виникають під час виконання, як поводиться сервіс під навантаженням.

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

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

Що таке журнали Docker і як вони формуються?

Перш ніж переходити до команд, важливо зрозуміти, що саме Docker вважає журналами контейнера.

Docker збирає вивід основного процесу контейнера, а саме:

  • стандартний потік виводу (stdout);
  • стандартний потік помилок (stderr).

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

За замовчуванням Docker використовує драйвер логування json-file. У цьому випадку журнали зберігаються на хості у вигляді json-файлів, окремо для кожного контейнера. Саме драйвер логування визначає, де зберігаються логи, у якому форматі та чи можна їх переглядати через CLI.

Перегляд журналів Docker: базові дії

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

Отримати список контейнерів

docker ps

Команда показує активні контейнери, їх ідентифікатори, імена та статус. Для подальшої роботи достатньо знати ім’я або container ID.

Переглянути журнали контейнера

docker logs <container_name_or_id>

Ця команда виведе всі доступні журнали контейнера на момент виконання. Якщо контейнер працює довго або генерує багато повідомлень, вивід може бути дуже об’ємним. Тому на практиці майже завжди використовуються додаткові параметри.

Фільтрація та контроль виводу журналів

Щоб швидко отримувати релевантну інформацію, Docker надає набір корисних опцій.

Обмеження кількості рядків

docker logs --tail 50 <container>

Показує лише останні 50 рядків журналу. Це зручно для аналізу помилок, які виникли нещодавно.

Додавання часових міток

docker logs --timestamps <container>

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

Перегляд у реальному часі

docker logs -f <container>

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

Фільтрація за часом

docker logs --since 10m <container>

docker logs --until 2025-12-17T12:00:00 <container>

Опції –since та –until допомагають обмежити вивід певним часовим проміжком. Це особливо корисно під час аналізу інцидентів.

Робота з журналами у Docker Compose

У проєктах з кількома сервісами зазвичай використовується Docker Compose. Для таких випадків передбачена окрема команда.

docker compose logs

Вона показує журнали всіх сервісів у межах поточного проєкту. За потреби можна вказати конкретний сервіс або використовувати ті самі параметри, що й у docker logs: –follow, –tail, –timestamps.

Де Docker зберігає журнали на хості?

При використанні драйвера json-file журнали зберігаються у файловій системі хоста. Типовий шлях виглядає так:

/var/lib/docker/containers/<container-id>/<container-id>-json.log

Щоб отримати точний шлях для конкретного контейнера, варто скористатися командою:

docker inspect -f '{{.LogPath}}' <container>

Важливо розуміти, що цей шлях існує на хості, а не всередині контейнера. Тому побачити ці файли через docker exec не вийде.

Чому docker logs може нічого не показувати?

Ситуація, коли контейнер запущений, але журнали порожні, трапляється досить часто. Основні причини такі:

  1. Застосунок не пише у stdout або stderr.
    У цьому випадку Docker просто не має що показувати.
  2. Вивід буферизується.
    Деякі мови програмування буферизують stdout. Наприклад, для Python часто потрібно вмикати неблокуючий режим виводу.
  3. Використовується драйвер логування без підтримки читання логів.
    Не всі драйвери дозволяють перегляд журналів через docker logs.
  4. Контейнер швидко завершує роботу.
    Варто перевірити docker ps -a і статус контейнера.

Запобігання проблемам з диском

Одна з найпоширеніших операційних проблем — неконтрольоване зростання лог-файлів.

Налаштування ротації журналів

Для json-file необхідно обмежувати розмір і кількість файлів:

{

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "10m",

    "max-file": "3"

  }

}

Це налаштовується на рівні Docker daemon і потребує його перезапуску.

Використання зовнішніх систем логування

У продакшен середовищах журнали зазвичай передаються у зовнішні системи: Fluentd, CloudWatch, Splunk та інші. Такий підхід спрощує пошук, аналіз і довготривале зберігання даних.

Висновок

Журнали Docker — це ключовий інструмент для аналізу роботи контейнерів і пошуку проблем. 

Для стабільної експлуатації важливо не лише вміти переглядати журнали, а й керувати ними: налаштовувати ротацію, обирати відповідний драйвер логування та за потреби передавати логи у зовнішні системи. Саме такий підхід дозволяє уникнути операційних ризиків і спрощує підтримку контейнеризованих застосунків.

Приборкати Docker допоможе систематизований курс від ITEDU. Всього за 3 тижні ви перетворите знання на впевнені скіли. Приєднуйтесь.

Залишити відповідь

Дякуємо, що поділились