Как уменьшить размер файла docker_data.vhdx в Docker Desktop (Windows)

docker_windows_wsl

Проблема заключается в том, что Docker Desktop в Windows использует WSL2 (Windows Subsystem for Linux), который хранит все свои данные в виртуальном жестком диске формата .vhdx.

Особенность этого формата в WSL2 заключается в том, что он автоматически расширяется при добавлении данных, но не уменьшается автоматически, когда вы удаляете образы, контейнеры и тома (volumes) внутри Docker. Windows просто видит большой файл, внутри которого много пустого места.

Чтобы физически уменьшить размер файла docker_data.vhdx на диске, его нужно «сжать» (compact) встроенными средствами Windows.

Шаг 1. Полная остановка Docker и WSL

  1. Полностью закройте Docker Desktop (нажмите правой кнопкой мыши на иконку Docker в трее возле часов и выберите Quit Docker Desktop).
  2. Откройте PowerShell или командную строку (CMD) и выполните команду для остановки всех подсистем Linux:

    wsl --shutdown

Это критически важно: если WSL работает, файл будет заблокирован, и сжать его не получится.

Шаг 2. Найдите точный путь к файлу

Обычно файл находится по следующему пути:

C:\Users\<Ваше_Имя_Пользователя>\AppData\Local\Docker\wsl\disk\docker_data.vhdx

Вы можете вставить %LOCALAPPDATA%\Docker\wsl\disk\ в адресную строку Проводника, чтобы быстро открыть эту папку и убедиться, что файл там есть.

Шаг 3. Сжатие файла через Diskpart

  1. Запустите PowerShell или Командную строку (CMD) от имени Администратора (Пуск → введите cmd → Правый клик → Запуск от имени администратора).
  2. Запустите утилиту управления дисками, введя: diskpart
  3. Поочередно введите следующие команды (замените путь на ваш актуальный путь из Шага 2):
select vdisk file="C:\Users\ВАШЕ_ИМЯ\AppData\Local\Docker\wsl\disk\docker_data.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

В момент выполнения compact vdisk утилита покажет процент выполнения. Это может занять от нескольких секунд до пары минут в зависимости от размера файла и скорости SSD.

Альтернативный Шаг 3 (Только для Windows Pro / Enterprise)

Если у вас установлена версия Windows Pro или Enterprise и включен модуль Hyper-V, вы можете использовать более простую команду в PowerShell (от имени Администратора):

Optimize-VHD -Path "C:\Users\ВАШЕ_ИМЯ\AppData\Local\Docker\wsl\disk\docker_data.vhdx" -Mode Full

Шаг 4. Запуск Docker

После успешного выполнения команды просто снова откройте Docker Desktop. Файл на диске теперь будет весить ровно столько, сколько реально занимают ваши образы, контейнеры и volumes.

💡 Лайфхак: Включение Sparse VHD

В современных версиях WSL2 и Windows 11 (и обновленной Windows 10) появилась функция Sparse VHD, которая позволяет виртуальному диску автоматически уменьшаться при удалении файлов внутри него.

Чтобы включить это:

  1. Закройте Docker и выполните wsl --shutdown.
  2. Откройте Проводник и перейдите в папку вашего профиля: C:\Users\<Ваше_Имя>
  3. Найдите там файл .wslconfig (если его нет, создайте новый текстовый файл и назовите его именно так, включая точку в начале).
  4. Откройте его в Блокноте и добавьте следующие строки:
[wsl2]
sparseVhd=true
  1. Сохраните файл и запустите Docker Desktop. Теперь при выполнении docker system prune Windows будет автоматически возвращать неиспользуемое пространство на ваш физический диск.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *