Logrotate и Docker: Зачем и как?
Опубликовано 05.09.2025
Введение
Logrotate — это мощный инструмент для управления логами в Linux, но его взаимодействие с Docker имеет свои особенности.
Это руководство объясняет, как правильно использовать logrotate с Docker-контейнерами и когда лучше обойтись встроенными средствами управления логами Docker.
Docker-контейнеры и логи
Docker собирает логи стандартных потоков вывода (stdout и stderr) контейнеров и по умолчанию сохраняет их в формате JSON-файлов:
/var/lib/docker/containers/\<container\_id>/\<container\_id>-json.log
Если контейнер генерирует много логов, эти файлы могут занимать гигабайты и быстро «съесть» всё дисковое пространство.
Встроенные средства Docker
Docker имеет встроенные механизмы ограничения логов через параметры log-opt при запуске контейнера (docker run) или в docker-compose.yml.
Основные параметры
max-size— максимальный размер файла лога.max-file— количество файлов логов, которые будут храниться.
Пример docker-compose.yml
version: '3'
services:
my-service:
image: my-service-image
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Это рекомендуемый способ управления логами в Docker — простой, безопасный и официально поддерживаемый.
Logrotate: необходимость и преимущества
Зачем использовать logrotate, если в Docker есть свои средства?
Ответ: централизация и гибкость.
Преимущества logrotate
- 📌 Централизация — можно управлять логами всех сервисов (Docker, Nginx, PostgreSQL) из одного места.
- 📌 Гибкость — поддержка сжатия, уведомлений, запуска скриптов после ротации.
- 📌 Совместимость — работает даже с legacy-системами.
- 📌 Стабильность — предотвращает переполнение диска.
Пример конфигурации logrotate для Docker
Создайте файл /etc/logrotate.d/docker-containers:
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size 100M
copytruncate
su root root
}
Объяснение параметров
rotate 7— хранить 7 архивов.daily— ротация раз в день.compress— сжатие старых логов.size 100M— ротация при достижении 100 МБ.copytruncate— скопировать и обнулить файл без перезапуска контейнера.su root root— запуск от имени root.
💡 Благодаря copytruncate контейнер не нужно перезапускать — Docker продолжит писать в тот же файл.
Docker log-opt или logrotate: что выбрать?
✅ Используйте встроенные опции Docker (max-size, max-file), если:
- Все сервисы работают в контейнерах.
- Нужен быстрый и надёжный контроль роста логов.
- Удобно прописывать параметры в
docker-compose.yml. - Вы хотите использовать только поддерживаемые Docker-фичи.
✅ Используйте logrotate, если:
- У вас разные сервисы (контейнеры + системные демоны).
- Уже настроен
logrotateи вы хотите централизовать управление. - Нужны расширенные сценарии ротации.
- Работа с legacy-системами, где встроенные параметры недоступны.
Лучшие практики
Для новых проектов: всегда начинайте с встроенных настроек Docker.
Для продакшена: можно комбинировать оба подхода:
- Docker ограничивает рост логов (
max-size,max-file). - Logrotate управляет системными логами и архивирует контейнерные.
- Docker ограничивает рост логов (
Заключение
- Встроенные механизмы Docker — это первый выбор для управления логами.
Logrotateостаётся полезным инструментом для централизации и гибкости.- Оптимальный подход в продакшене: комбинировать оба метода.