docker logs — просмотр логов контейнера

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

Вся рубрика 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 сразу.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x