Кратко в 3 пунктах

  • Логи консоли контейнеров Docker хранятся в файлах на диске хоста, а не в системной памяти.
  • Команда docker logs считывает и отображает содержимое этих сохраненных файлов.
  • Чтобы предотвратить бесконечный рост файлов логов, крайне важно настроить параметры ротации логов (max-size, max-file).

1. Где и как хранятся логи?

Docker собирает как стандартный вывод (stdout), так и стандартную ошибку (stderr) контейнеров и обрабатывает их через драйвер логирования (Logging Driver). Если специальные настройки не заданы, Docker по умолчанию использует драйвер логирования json-file.

  • Место хранения: Логи контейнеров сохраняются в виде JSON-файлов по определенному пути в файловой системе хост-системы. Обычно путь выглядит так:
    • /var/lib/docker/containers/[컨테이너_ID]/[컨тей너_ID]-json.log
  • Команда docker logs: Эта команда на самом деле не отображает содержимое из памяти, а считывает вышеупомянутые JSON-файлы логов и выводит их в терминал.

Изображение ChatGPT 2026년 5월 12일 오후 12_37_29.png

2. Разве постоянное накопление логов не приводит к нехватке дискового пространства?

Да, это так. Если не принять меры, файлы логов будут постоянно расти и могут занять все дисковое пространство хоста. Чтобы предотвратить это, Docker предоставляет опции ротации логов (Log Rotation), которые ограничивают размер и количество файлов логов.

Например, при выполнении команды docker run можно добавить следующие опции:

docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx
  • --log-opt max-size=10m: Ограничивает максимальный размер одного файла лога 10 МБ.
  • --log-opt max-file=3: Ограничивает максимальное количество файлов логов 3 штуками. Если их становится больше 3, самый старый файл удаляется.

Таким образом, логи этого контейнера будут занимать не более 30 МБ (10 МБ * 3 файла) дискового пространства.


3. Настройка в файле docker-compose.yml

В Docker Compose очень легко настроить параметры логирования для каждой службы прямо в файле docker-compose.yml.

Представьте, что флаг --log-opt команды docker run просто переносится в формат YAML.

Ниже приведен пример применения ротации логов для службы под названием my-app.

services:
  my-app:
    image: your-app-image
    # ... другие настройки ...
    deploy:
      resources:
        limits:
          memory: 512M

    # 👇 Эта часть относится к настройкам логирования.
    logging:
      driver: "json-file"  # Используемый драйвер логирования (можно опустить, так как это значение по умолчанию)
      options:
        max-size: "10m"    # Максимальный размер файла: 10 МБ
        max-file: "3"      # Максимальное количество файлов: 3
  • logging: Ключ, инициирующий настройки логирования для данной службы.
  • driver: Указывает используемый драйвер логирования. json-file — значение по умолчанию.
  • options: Задает опции, передаваемые драйверу.
    • max-size: Аналогично --log-opt max-size в docker run.
    • max-file: Аналогично --log-opt max-file в docker run.

Теперь, при запуске этой службы с помощью docker-compose up, логи контейнера my-app будут автоматически ротироваться, занимая не более 30 МБ (10 МБ * 3 файла) дискового пространства.

4. Установка по умолчанию для всех контейнеров

Если вам неудобно задавать опции для каждого контейнера по отдельности и вы хотите применить политику по умолчанию ко всей системе, лучше всего изменить файл настроек демона Docker (Daemon).

  1. Откройте или создайте файл /etc/docker/daemon.json. (Если файла нет, создайте его.)
  2. Добавьте следующее содержимое:
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}
  1. Перезапустите демон Docker.
sudo systemctl restart docker

После этой настройки все контейнеры, создаваемые в будущем, будут автоматически следовать этой политике, если для них не заданы отдельные параметры логирования. Конечно, если вы укажете другие параметры логирования для конкретного контейнера в файле docker-compose.yml или с помощью команды docker run, то индивидуальные настройки будут иметь приоритет над настройками демона.

  • Настройки для отдельных служб: Наиболее распространенный и удобный способ — это настройка в секции logging файла docker-compose.yml.
  • Глобальные настройки по умолчанию: Чтобы применить единую политику ко всем контейнерам на сервере, измените файл /etc/docker/daemon.json.