Диск на маленьком сервере кончается не от данных, а от логов. Причём происходит это тихо: сервис продолжает работать, пока свободного места не останется совсем, а потом падает сразу всё, включая то, чем вы собирались чинить.
Драйвер json-file по умолчанию не ограничен вообще ничем. Контейнер, который пишет пару строк в секунду, за месяц спокойно набирает несколько гигабайт, и никакой logrotate к ним не применяется — это отдельная подсистема.
Лечится в compose-файле каждого сервиса:
logging:
driver: json-file
options:
max-size: 30m
max-file: "5"
Либо глобально, в /etc/docker/daemon.json, если не хочется дублировать в каждом файле. Учтите, что глобальная настройка применится только к новым контейнерам: уже созданные останутся со старыми параметрами до пересоздания.
Посмотреть, сколько занято сейчас:
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail
У journald своя логика: он ограничивает себя долей от размера файловой системы, по умолчанию около десяти процентов. На диске в двадцать пять гигабайт это два с половиной гигабайта журналов, что многовато. Разумно задать явный потолок:
[Journal]
SystemMaxUse=300M
MaxRetentionSec=14day
Файл /etc/systemd/journald.conf.d/limits.conf, затем systemctl restart systemd-journald. Освободить место немедленно можно командой journalctl --vacuum-size=200M.
Здесь правила уже есть, но стоит проверить два момента. Первое — compress, без него старые файлы лежат в исходном виде и занимают в несколько раз больше. Второе — rotate, число хранимых копий: четырнадцать по умолчанию редко нужно, семи обычно достаточно.
Проверить, что правила действительно применяются:
logrotate -d /etc/logrotate.d/nginx
Флаг -d показывает, что было бы сделано, ничего не меняя. Полезно, когда правила правились руками и есть сомнения в синтаксисе.
Всё перечисленное сводится к одному вопросу: сколько места осталось. Проверка занимает строчку и стоит того, чтобы висеть в мониторинге:
df -h / | awk 'NR==2 {print $5}'
Алерт на восьмидесяти процентах даёт запас в несколько дней даже при активной записи. Этого хватает, чтобы разобраться без спешки — а спешка при кончившемся диске обычно заканчивается удалением не того файла.