> **Кратко в 3 пунктах** > > * Логи консоли контейнеров Docker **хранятся в файлах на диске хоста, а не в системной памяти.** > * Команда `docker logs` считывает и отображает содержимое этих сохраненных файлов. > * Чтобы предотвратить бесконечный рост файлов логов, **крайне важно настроить параметры ротации логов (`max-size`, `max-file`).** ## 1. Где и как хранятся логи? {#sec-37c2a29cff35} [[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](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2. Разве постоянное накопление логов не приводит к нехватке дискового пространства? {#sec-4e6257ec2aba} Да, это так. Если не принять меры, файлы логов будут постоянно расти и могут занять все дисковое пространство хоста. Чтобы предотвратить это, 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` {#sec-890442ea3ac0} В 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. Установка по умолчанию для всех контейнеров {#sec-1a0729e53c34} Если вам неудобно задавать опции для каждого контейнера по отдельности и вы хотите применить политику по умолчанию ко всей системе, лучше всего изменить файл **настроек демона Docker (Daemon)**. 1. Откройте или создайте файл `/etc/docker/daemon.json`. (Если файла нет, создайте его.) 2. Добавьте следующее содержимое: ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3. Перезапустите демон Docker. ```bash sudo systemctl restart docker ``` После этой настройки **все контейнеры**, создаваемые в будущем, будут автоматически следовать этой политике, если для них не заданы отдельные параметры логирования. Конечно, если вы укажете другие параметры логирования для конкретного контейнера в файле `docker-compose.yml` или с помощью команды `docker run`, то **индивидуальные настройки будут иметь приоритет** над настройками демона. * **Настройки для отдельных служб**: Наиболее распространенный и удобный способ — это настройка в секции `logging` файла `docker-compose.yml`. * **Глобальные настройки по умолчанию**: Чтобы применить единую политику ко всем контейнерам на сервере, измените файл `/etc/docker/daemon.json`.