docker logs выводит логи контейнера — всё что приложение написало в stdout и stderr. Поддерживает слежение в реальном времени, фильтрацию по времени и ограничение количества строк.

- Базовые команды
- Фильтрация и поиск в логах
- Логи в Docker Compose
- Где хранятся логи на хосте
- Настройка log driver — ограничение размера
- Часто задаваемые вопросы
- Где хранятся логи Docker контейнеров?
- Как очистить логи Docker контейнера?
- docker logs не показывает логи приложения — почему?
- Что читать дальше по Docker
Базовые команды
# Все логи контейнера
docker logs my-nginx
# Следить в реальном времени (как tail -f)
docker logs -f my-nginx
# Ctrl+C — остановить слежение (контейнер продолжает работать)
# Последние N строк
docker logs --tail 50 my-nginx
docker logs --tail 100 my-nginx
# Последние 100 строк + следить
docker logs --tail 100 -f my-nginx
# Логи с временными метками
docker logs --timestamps my-nginx
# Логи за последние 30 минут
docker logs --since 30m my-nginx
# Логи с конкретного времени
docker logs --since "2024-01-15T10:00:00" my-nginx
# Логи до определённого времени
docker logs --until "2024-01-15T12:00:00" my-nginx
# Диапазон времени
docker logs --since 2h --until 1h my-nginx
Фильтрация и поиск в логах
# Найти ошибки в логах
docker logs my-app 2>&1 | grep -i error
# Найти конкретный запрос
docker logs my-nginx | grep "POST /api"
# Посчитать ошибки
docker logs my-app 2>&1 | grep -c ERROR
# Последние 200 строк и найти предупреждения
docker logs --tail 200 my-app | grep -i warn
# Исключить INFO из вывода
docker logs my-app 2>&1 | grep -v INFO
Логи в Docker Compose
# Логи всех сервисов
docker compose logs
# Следить за всеми сервисами
docker compose logs -f
# Логи конкретного сервиса
docker compose logs app
docker compose logs -f db
# Последние 100 строк по каждому сервису
docker compose logs --tail 100
# Логи нескольких сервисов
docker compose logs app db
Где хранятся логи на хосте
# По умолчанию Docker использует json-file driver
# Логи хранятся на хосте по пути:
# /var/lib/docker/containers//-json.log
# Узнать точный путь к файлу логов
docker inspect my-nginx | grep LogPath
# "LogPath": "/var/lib/docker/containers/abc123.../abc123...-json.log"
# Посмотреть напрямую (требует root)
sudo cat /var/lib/docker/containers/abc123.../abc123...-json.log | head -5
Настройка log driver — ограничение размера
По умолчанию логи Docker растут бесконечно — это может заполнить диск. Рекомендуется ограничить размер.
# При запуске контейнера
docker run -d \
--name my-app \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp
# max-size — максимальный размер одного файла лога
# max-file — сколько файлов хранить (ротация)
# Глобальная настройка для всего Docker
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
# sudo systemctl restart docker
В docker-compose.yml:
services:
app:
image: myapp
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Часто задаваемые вопросы
Где хранятся логи Docker контейнеров?
По умолчанию — в файлах JSON на хосте: /var/lib/docker/containers/<container-id>/<container-id>-json.log. Это json-file log driver. Каждая строка лога — JSON объект с полями log (текст), stream (stdout/stderr), time (время). Путь к файлу: docker inspect container | grep LogPath.
Как очистить логи Docker контейнера?
Официального способа очистить логи без остановки контейнера нет. Варианты: 1) Перезапустить контейнер — логи сбрасываются при пересоздании. 2) Усечь файл напрямую (root): sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' container_name). 3) Настроить ротацию через max-size/max-file — тогда логи не будут расти бесконечно.
docker logs не показывает логи приложения — почему?
Две причины: 1) Приложение пишет в файл, не в stdout/stderr. Docker собирает только stdout/stderr. Решение: настроить приложение писать в stdout, или добавить -> /proc/1/fd/1 symlink. 2) Буферизация вывода. Python буферизует stdout — добавь ENV PYTHONUNBUFFERED=1 в Dockerfile или запускай с python -u. Для Node.js — console.log пишет в stdout сразу.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- docker run — уточнить параметры запуска контейнера.
- docker exec — зайти внутрь контейнера для диагностики.
- Docker Compose — смотреть логи нескольких сервисов через Compose.



