ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Размер логов Docker: ротация и управление диском

Автор: · Обновлено

Контейнер может занимать мало места в образах и одновременно заполнять диск журналами. Ротация задаёт предел локальной истории, а не уменьшает количество событий приложения. После урока вы настроите ограниченное хранение для одного сервиса и проверите, что настройка действительно попала в созданный контейнер.

Где искать расход

Начните с docker system df -v, свободного места df -h и inode df -i. Размеры образов и volumes не описывают весь расход logging driver. Узнайте тип драйвера через docker inspect --format '{{json .HostConfig.LogConfig}}' NAME; формат хранения зависит от него.

Если приложение одновременно пишет файл в volume и stdout, данные могут храниться дважды. Настройка Docker driver ограничит только его поток; файл приложения требует собственной политики. По времени роста и по имени mount определите владельца расхода до удаления файлов. Для учебного стенда достаточно нескольких сообщений, не нужно намеренно заполнять диск.

Ротация одного Compose-сервиса

Сохраните отдельный пример:

name: yk-logrotate-demo
services:
  writer:
    image: alpine:3.22
    command: ["sh", "-c", "echo 'rotation configured'; sleep 300"]
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

После docker compose up -d получите ID writer через docker compose ps -q writer. Передайте его команде inspect выше: в Config должны быть строки max-size и max-file. Размеры в этом примере — учебный бюджет, а не универсальная рекомендация для production. Опции json-file.

max-size задаёт условие переключения файла, max-file — число сохраняемых файлов при ротации. Оценка «около трёх файлов по 10 MB» полезна для планирования, но не является жёсткой квотой всего диска: есть текущие записи, метаданные и другие контейнеры. Умножьте бюджет на число реплик и добавьте журналы самой системы.

Почему настройка не применилась

Изменение настроек daemon по умолчанию действует на новые контейнеры. Ранее созданные сохраняют выбранную конфигурацию; обычный restart приложения её не переопределяет. В Compose после изменения logging пересоздайте затронутый сервис и снова проверьте inspect. Запланируйте такое изменение с учётом остановки приложения и сохранности его данных. Правила конфигурации logging.

Драйвер local имеет встроенную ротацию и более компактное внутреннее представление. Он подходит многим локальным сценариям, но выбор должен учитывать потребителей: например, docker service logs в Swarm имеет собственные ограничения драйверов. Переход не должен ломать сборщик, ожидающий другой источник. Описание local.

Можно ли очистить лог контейнера

У Docker нет универсальной команды docker logs --clear. Внутренние файлы driver принадлежат daemon; прямое удаление или truncate во время работы может нарушить его ожидания. Для управляемого изменения задайте ротацию и пересоздайте контейнер, предварительно выгрузив нужную диагностику и проверив сохранение данных в mount. Это удаляет историю конкретного старого контейнера вместе с ним, но не является безопасным способом чистки любых неизвестных файлов.

Если диск уже заполнен, сначала остановите источник чрезмерного потока и выясните, какие данные можно удалить. Не выполняйте общий system prune --volumes ради одного лога: так легко удалить несвязанные данные, не исправив причину роста.

Проверка для своего проекта

Посчитайте ожидаемый объём истории: число событий в секунду, средний размер, нужный интервал и количество реплик. Сравните его с доступным диском и требованиями хранения. После настройки убедитесь, что нужные недавние сообщения читаются через docker compose logs, затем завершите одноразовый проект docker compose down. Если история нужна дольше локального бюджета, добавляйте внешнее хранение с собственными правами и сроками, а не бесконечный файл на сервере.

Источники