Logrotate и Docker: Зачем и как?
Опубликовано 05.09.2025
Logrotate и Docker: Зачем и как?
Введение
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
остаётся полезным инструментом для централизации и гибкости.- Оптимальный подход в продакшене: комбинировать оба метода.
Похожие посты
Jitsi Meet против Google Meet: когда полный контроль над данными важнее всего
07.09.2025
101 | Traefik: Динамический маршрутизатор для контейнерной эры
05.09.2025
100 | Caddy: Веб-сервер, который просто работает и SSL из коробки
04.09.2025
073 | Введение в виртуализацию: Зачем она нужна и как экономит время?
04.08.2025