#Как проявляется проблема и где искать причину
У Docker журналы контейнера могут занимать гигабайты, особенно при драйвере json-file без ограничения размера. Увеличение места может также происходить из-за слоёв образов и томов — нужно определить источник, а не удалять файлы наугад.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Непрерывные сообщения приложенияПриложение пишет ошибки в stdout/stderr в цикле | docker logs показывает повторяющийся текст | Исправить источник ошибки и ограничить журнал |
| Не настроена ротацияИспользуется json-file без max-size/max-file | inspect показывает пустые log-opts | Настроить ротацию для новых/пересозданных контейнеров |
#Пошаговая диагностика и устранение
- 1. Проверьте, какая файловая система заполниласьНа Linux-сервере выполните df и сравните использование корневого раздела и каталога Docker. Если место закончилось не там, ищите другой источник роста.
- Linux, чтение; не относится к хранилищу Docker Desktop внутри виртуального дискаLinux · Терминал (Bash)Только проверкаLinux, чтение; не относится к хранилищу Docker Desktop внутри виртуального диска.
df -h
- 2. Отделите образы, тома и контейнерыЗапустите системную сводку Docker: она покажет объём образов, контейнеров, томов и кэша сборки. Это не точная сумма файлов журналов, поэтому переходите к следующему шагу.Linux · Терминал (Bash)КомандаКоманда только читает данные, может выполняться заметное время.
docker system df -v
- 3. Определите драйвер конкретного контейнераПолучите действующие настройки контейнера. В выводе для json-file ищите max-size и max-file. Важно: изменение daemon.json не меняет опции у уже существующего контейнера.
- ИМЯ замените на реальное имя контейнера; вывод не изменяет настройкиLinux · Терминал (Bash)КомандаИМЯ замените на реальное имя контейнера; вывод не изменяет настройки.
docker inspect --format "{{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}" ИМЯ
- 4. Найдите повторяющиеся сообщенияПосмотрите ограниченный хвост и частоту меток времени; не выгружайте все гигабайты журнала без необходимости. При появлении исключений сначала исправьте зацикленную ошибку приложения.
- Показывает не более 200 последних записей за 10 минут; обезличьте перед пересылкойLinux · Терминал (Bash)КомандаПоказывает не более 200 последних записей за 10 минут; обезличьте перед пересылкой.
docker logs --since 10m --tail 200 --timestamps ИМЯ
- 5. Настройте ротацию для тестового сервисаВ Compose у нужного сервиса установите logging.driver: json-file и options.max-size: "10m", max-file: "3". Это ограничит количество файлов, но старые логи будут удаляться при ротации; согласуйте срок хранения с политикой аудита.
- Фрагмент внутри сервиса Compose; в YAML значения лог-опций — строкиТекстФрагмент внутри сервиса Compose; в YAML значения лог-опций — строки.
logging: driver: json-file options: max-size: "10m" max-file: "3"
- 6. Пересоздайте тестовый контейнер и проверьтеНовые параметры применятся к пересозданному контейнеру. В тестовом проекте после сохранения данных выполните docker compose up -d --force-recreate ИМЯ_СЕРВИСА и повторите inspect.Linux · Терминал (Bash)С осторожностьюМожет вызвать простой; только после резервной копии томов.
docker compose up -d --force-recreate ИМЯ_СЕРВИСАКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Отследите рост после исправленияЧерез сравнимый промежуток времени снова проверьте df и docker system df, а также частоту ошибок приложения. Если место продолжает уменьшаться, изучите тома/кэш/приложение отдельно; не выполняйте автоматическую очистку всех ресурсов.
#Как проверить результат
Логируемые ошибки устранены, у пересозданного контейнера видны ограничения журнала, размер файловой системы больше не растёт бесконтрольно.
#Если исправление не помогло
Если необходим долгий срок хранения журналов, используйте централизованную систему сбора с установленным сроком хранения; не отключайте журналирование целиком.