Оптимизация дисковых драйверов Docker: overlay2, fstrim и очистка кэша
- Переполнение каталога
/var/lib/docker/overlay2(ошибкаNo space left on device). - Низкая скорость сборки и запуска контейнеров из-за фрагментации слоев хранилища.
- Ошибки демона Docker при запуске на файловых системах без поддержки
d_type.
1. Проверка используемого драйвера и файловой системы
docker info --format 'Storage Driver: {{.DriverStatus}}'Убедитесь, что базовая ФС поддерживает d_type:
xfs_info /var/lib/docker | grep -o "ftype=1"2. Конфигурация драйвера overlay2 в daemon.json
Создайте или отредактируйте /etc/docker/daemon.json:
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}systemctl restart docker3. Комплексная очистка неиспользуемых слоев и кэша
# Анализ занятого пространства
docker system df
# Безопасная очистка остановленных контейнеров, висячих сетей и образов
docker system prune -a --volumes -f
# Очистка кэша сборщика BuildKit
docker builder prune -a -f4. Освобождение неиспользуемых блоков SSD через fstrim
fstrim -av Частые вопросы (FAQ)
Почему удаление файлов внутри работающего контейнера не освобождает место на хосте?
Overlay2 использует модель Copy-on-Write. Удаление файла в верхнем слое контейнера (Upperdir) создает специальный файл типа whiteout, который только скрывает файл из нижнего слоя (Lowerdir), не удаляя физические данные из базового образа.
Можно ли вручную удалять папки из /var/lib/docker/overlay2?
Категорически запрещено. Это разрушит внутреннюю базу данных метаданных Docker (/var/lib/docker/image/overlay2/layerdb) и приведет к полной неработоспособности демона.