Skip to main content

Docker — Logs (Работа с логами)

Эта страница объясняет, как Docker хранит и обрабатывает логи контейнеров. Здесь разобраны команды для просмотра логов, способы ограничения их размера, настройка log rotation и рекомендации по работе с логами в production. Материал рассчитан на начинающих и помогает понять, где хранятся Docker-логи и как предотвратить переполнение диска из-за их роста.


Что такое Docker Logs

Каждый контейнер записывает стандартные потоки вывода:

  • stdout — обычные сообщения
  • stderr — ошибки

Docker автоматически сохраняет эти данные как логи контейнера.

Пример логов:

[INFO] Server started
[INFO] Connection established
[ERROR] Database connection failed

Логи помогают:

  • диагностировать ошибки
  • отслеживать работу приложения
  • анализировать поведение сервисов

Просмотр логов контейнера

Показать логи контейнера

docker logs <container>

Пример:

docker logs nginx_container

Показать последние строки логов

docker logs --tail=100 <container>

Пример:

docker logs --tail=100 nginx_container

Это покажет последние 100 строк логов.


Просмотр логов в реальном времени

docker logs -f <container>

Пример:

docker logs -f nginx_container

Флаг -f означает follow — поток логов в реальном времени.

Выход из режима просмотра:

CTRL + C

Логи Docker Compose

Если используется Docker Compose, можно смотреть логи сервисов.


Логи сервиса

docker compose logs <service>

Пример:

docker compose logs nginx

Логи в реальном времени

docker compose logs -f <service>

Последние строки логов

docker compose logs --tail=100

Где Docker хранит логи

По умолчанию Docker использует драйвер логирования:

json-file

Файлы логов находятся в директории:

/var/lib/docker/containers/

Пример пути:

/var/lib/docker/containers/<container_id>/<container_id>-json.log

Эти файлы могут со временем значительно увеличиваться.


Проверка размера логов

Если диск сервера заполняется, одной из причин могут быть логи контейнеров.

Проверить размер можно так:

du -sh /var/lib/docker/containers/*

Это покажет размер логов каждого контейнера.


Ограничение размера логов

Чтобы логи не занимали весь диск, можно настроить log rotation.


Настройка логов в docker-compose.yml

Пример конфигурации:

services:
  app:
    image: my_app
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Что означают параметры

Параметр Назначение
max-size максимальный размер файла логов
max-file количество файлов

Пример выше означает:

максимум 3 файла по 10 MB

То есть максимум:

30 MB логов

Глобальная настройка логов Docker

Ограничение логов можно задать для всего Docker.

Файл конфигурации:

/etc/docker/daemon.json

Пример:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

После изменения нужно перезапустить Docker:

sudo systemctl restart docker

Очистка логов контейнера

Иногда логи могут стать очень большими.

Можно очистить файл логов:

truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log

Важно: Очищать логи нужно осторожно и только при необходимости.


Проверка драйвера логирования

Можно посмотреть настройки логирования контейнера:

docker inspect <container>

В выводе нужно найти раздел:

LogConfig

Альтернативные драйверы логирования

Docker поддерживает разные драйверы логов.

Драйвер Назначение
json-file стандартный
syslog системный лог
journald systemd
fluentd централизованный лог
gelf Graylog

Для production часто используют централизованные системы логирования.


Типичные проблемы с логами

Логи занимают весь диск

Если log rotation не настроен, файлы логов могут вырасти до нескольких гигабайт.

Решение:

  • настроить max-size
  • настроить max-file

Слишком много логов

Некоторые приложения пишут слишком подробные логи.

Решение:

  • уменьшить уровень логирования
  • использовать INFO вместо DEBUG

Невозможно найти ошибку

Иногда полезно посмотреть логи нескольких сервисов:

docker compose logs

Типичный сценарий диагностики

Если сервис не работает:

1 Проверить контейнер

docker compose ps

2 Посмотреть логи

docker compose logs --tail=100

3 Следить за логами

docker compose logs -f

Краткая памятка

docker logs <container>                 # логи контейнера
docker logs -f <container>              # логи в реальном времени
docker logs --tail=100 <container>      # последние строки

docker compose logs                     # логи всех сервисов
docker compose logs -f <service>        # логи сервиса

du -sh /var/lib/docker/containers/*     # размер логов

truncate -s 0 logfile                   # очистить лог