Настройка сбора и ротации логов в Docker: json-file, journald и syslog
- Дисковый раздел переполнен файлами
/var/lib/docker/containers/*/*-json.log. - Команда
docker logsдолго открывается или вызывает деградацию производительности хоста. - Потеря системных логов контейнеров при аварийных перезапусках.
1. Глобальная настройка ротации логов в daemon.json
Отредактируйте /etc/docker/daemon.json для всех создаваемых контейнеров:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3",
"compress": "true"
}
}systemctl restart docker2. Использование оптимизированного драйвера 'local' (Docker 20.10+)
Драйвер local предотвращает блокировки ввода-вывода и автоматически включен на ротацию:
{
"log-driver": "local",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}3. Индивидуальная настройка ротации в Docker Compose
services:
app:
image: my_app:latest
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "2"
compress: "true"4. Экстренная очистка логов без остановки контейнера
truncate -s 0 /var/lib/docker/containers/*/*-json.log Частые вопросы (FAQ)
Почему нельзя удалять .log файлы командой rm?
Если удалить файл лога через rm, процесс демона Docker продолжит удерживать открытый файловый дескриптор, и дисковое пространство не освободится до перезапуска демона. Используйте truncate.
Будет ли работать команда docker logs при переключении на syslog или fluentd?
По умолчанию нет. Для сохранения поддержки docker logs добавьте опцию mode: non-blocking и max-buffer-size.