# Docker — Logs (Работа с логами)

Эта страница объясняет, как Docker хранит и обрабатывает логи контейнеров. Здесь разобраны команды для просмотра логов, способы ограничения их размера, настройка log rotation и рекомендации по работе с логами в production. Материал рассчитан на начинающих и помогает понять, **где хранятся Docker-логи и как предотвратить переполнение диска из-за их роста**.

---

# Что такое Docker Logs

Каждый контейнер записывает стандартные потоки вывода:

* **stdout** — обычные сообщения
* **stderr** — ошибки

Docker автоматически сохраняет эти данные как **логи контейнера**.

Пример логов:

```text
[INFO] Server started
[INFO] Connection established
[ERROR] Database connection failed
```

Логи помогают:

* диагностировать ошибки
* отслеживать работу приложения
* анализировать поведение сервисов

---

# Просмотр логов контейнера

## Показать логи контейнера

```bash
docker logs <container>
```

Пример:

```bash
docker logs nginx_container
```

---

## Показать последние строки логов

```bash
docker logs --tail=100 <container>
```

Пример:

```bash
docker logs --tail=100 nginx_container
```

Это покажет последние 100 строк логов.

---

## Просмотр логов в реальном времени

```bash
docker logs -f <container>
```

Пример:

```bash
docker logs -f nginx_container
```

Флаг `-f` означает **follow** — поток логов в реальном времени.

Выход из режима просмотра:

```
CTRL + C
```

---

# Логи Docker Compose

Если используется Docker Compose, можно смотреть логи сервисов.

---

## Логи сервиса

```bash
docker compose logs <service>
```

Пример:

```bash
docker compose logs nginx
```

---

## Логи в реальном времени

```bash
docker compose logs -f <service>
```

---

## Последние строки логов

```bash
docker compose logs --tail=100
```

---

# Где Docker хранит логи

По умолчанию Docker использует драйвер логирования:

```text
json-file
```

Файлы логов находятся в директории:

```text
/var/lib/docker/containers/
```

Пример пути:

```text
/var/lib/docker/containers/<container_id>/<container_id>-json.log
```

Эти файлы могут со временем **значительно увеличиваться**.

---

# Проверка размера логов

Если диск сервера заполняется, одной из причин могут быть логи контейнеров.

Проверить размер можно так:

```bash
du -sh /var/lib/docker/containers/*
```

Это покажет размер логов каждого контейнера.

---

# Ограничение размера логов

Чтобы логи не занимали весь диск, можно настроить **log rotation**.

---

# Настройка логов в docker-compose.yml

Пример конфигурации:

```yaml
services:
  app:
    image: my_app
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
```

---

# Что означают параметры

| Параметр | Назначение                      |
| -------- | ------------------------------- |
| max-size | максимальный размер файла логов |
| max-file | количество файлов               |

Пример выше означает:

```text
максимум 3 файла по 10 MB
```

То есть максимум:

```
30 MB логов
```

---

# Глобальная настройка логов Docker

Ограничение логов можно задать для всего Docker.

Файл конфигурации:

```text
/etc/docker/daemon.json
```

Пример:

```json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
```

После изменения нужно перезапустить Docker:

```bash
sudo systemctl restart docker
```

---

# Очистка логов контейнера

Иногда логи могут стать очень большими.

Можно очистить файл логов:

```bash
truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log
```

> **Важно:**
> Очищать логи нужно осторожно и только при необходимости.

---

# Проверка драйвера логирования

Можно посмотреть настройки логирования контейнера:

```bash
docker inspect <container>
```

В выводе нужно найти раздел:

```text
LogConfig
```

---

# Альтернативные драйверы логирования

Docker поддерживает разные драйверы логов.

| Драйвер   | Назначение           |
| --------- | -------------------- |
| json-file | стандартный          |
| syslog    | системный лог        |
| journald  | systemd              |
| fluentd   | централизованный лог |
| gelf      | Graylog              |

Для production часто используют централизованные системы логирования.

---

# Типичные проблемы с логами

## Логи занимают весь диск

Если log rotation не настроен, файлы логов могут вырасти до нескольких гигабайт.

Решение:

* настроить `max-size`
* настроить `max-file`

---

## Слишком много логов

Некоторые приложения пишут слишком подробные логи.

Решение:

* уменьшить уровень логирования
* использовать `INFO` вместо `DEBUG`

---

## Невозможно найти ошибку

Иногда полезно посмотреть логи нескольких сервисов:

```bash
docker compose logs
```

---

# Типичный сценарий диагностики

Если сервис не работает:

### 1 Проверить контейнер

```bash
docker compose ps
```

---

### 2 Посмотреть логи

```bash
docker compose logs --tail=100
```

---

### 3 Следить за логами

```bash
docker compose logs -f
```

---

# Краткая памятка

```bash
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                   # очистить лог
```