Проблема заключается в том, что Docker Desktop в Windows использует WSL2 (Windows Subsystem for Linux), который хранит все свои данные в виртуальном жестком диске формата .vhdx.
Особенность этого формата в WSL2 заключается в том, что он автоматически расширяется при добавлении данных, но не уменьшается автоматически, когда вы удаляете образы, контейнеры и тома (volumes) внутри Docker. Windows просто видит большой файл, внутри которого много пустого места.
Чтобы физически уменьшить размер файла docker_data.vhdx на диске, его нужно «сжать» (compact) встроенными средствами Windows.
Шаг 1. Полная остановка Docker и WSL
- Полностью закройте Docker Desktop (нажмите правой кнопкой мыши на иконку Docker в трее возле часов и выберите Quit Docker Desktop).
- Откройте PowerShell или командную строку (CMD) и выполните команду для остановки всех подсистем Linux:
wsl --shutdown
Это критически важно: если WSL работает, файл будет заблокирован, и сжать его не получится.
Шаг 2. Найдите точный путь к файлу
Обычно файл находится по следующему пути:
C:\Users\<Ваше_Имя_Пользователя>\AppData\Local\Docker\wsl\disk\docker_data.vhdx
Вы можете вставить %LOCALAPPDATA%\Docker\wsl\disk\ в адресную строку Проводника, чтобы быстро открыть эту папку и убедиться, что файл там есть.
Шаг 3. Сжатие файла через Diskpart
- Запустите PowerShell или Командную строку (CMD) от имени Администратора (Пуск → введите cmd → Правый клик → Запуск от имени администратора).
- Запустите утилиту управления дисками, введя:
diskpart - Поочередно введите следующие команды (замените путь на ваш актуальный путь из Шага 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, которая позволяет виртуальному диску автоматически уменьшаться при удалении файлов внутри него.
Чтобы включить это:
- Закройте Docker и выполните
wsl --shutdown. - Откройте Проводник и перейдите в папку вашего профиля:
C:\Users\<Ваше_Имя> - Найдите там файл
.wslconfig(если его нет, создайте новый текстовый файл и назовите его именно так, включая точку в начале). - Откройте его в Блокноте и добавьте следующие строки:
[wsl2]
sparseVhd=true
- Сохраните файл и запустите Docker Desktop. Теперь при выполнении
docker system pruneWindows будет автоматически возвращать неиспользуемое пространство на ваш физический диск.
