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 # очистить лог
No comments to display
No comments to display