Стандартный драйвер json-file может годами складывать stdout контейнера в один файл. Если приложение пишет много, заканчивается место на системном диске, хотя volume с данными почти пуст.
Настройка для одного сервиса
services:
app:
image: example/app:stable
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
Так Docker оставит до пяти файлов примерно по 10 МБ. Для всего хоста задайте те же параметры в /etc/docker/daemon.json:
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
После изменения проверьте JSON командой jq . /etc/docker/daemon.json, затем перезапустите Docker в окно обслуживания. Новая настройка применяется только к заново созданным контейнерам: выполните docker compose up -d --force-recreate.
Диагностика
docker info --format '{{.LoggingDriver}}' показывает драйвер по умолчанию, а docker inspect -f '{{json .HostConfig.LogConfig}}' container — фактическую настройку. Размеры ищите через docker system df и du, но не удаляйте активные log-файлы вручную: демон продолжит держать открытый inode.
Логи ошибок всё равно нужно отправлять в централизованное хранилище или хотя бы мониторить. Ротация защищает диск, но не является архивом и не гарантирует расследование старого инцидента.
Официальные источники