Часто возникает проблема неограниченного расширения виртуального диска с докером на WIndows. Проблема в том, что после удаления лишних образов, контейнеров из docker объем виртуального диска докера не уменьшается. Одним из решением будет использование инструментов очистки пространства от докера и утилиты Diskpart совместно с compact.
Для начала запустим Windows Powershell и узнаем занимаемое пространства в докере с помощью команды: docker system df
Получим следующий вывод:

docker system df
В выводе видим информацию о размерах занимаемого пространства и сколько в % этого пространства не используется. На начальном этапе размер моего виртуального диска докера занимал 90 Гб. После использования дальнейших команд размер снизился на 30 Гб до 60 Гб.
Выполним команду docker system prune

docker system prune
Данная команда позволяет удалить кэш сборок, все не использующиеся в данный момент контейнеры, образы, созданные сети. Чтобы не удалить ничего лишнего я предпочитаю использовать отдельные команды для удаления локальных хранилищ, кэшей сборки, образов и контейнеров. Это можно сделать с помощью команд: docker volume prune
, docker builder prune
, docker image prune
, docker container prune
.
Как мы видели на первом изображении, у меня больше всего занимало места volume и build cashe, поэтому последовательно я применил команды docker volume prune
, docker builder prune
.
При запросе системы согласны ли мы на удаление, пишем да (Y).
После произведенных манипуляций картина такая:

docker system df
Однако виртуальный диск докера размер не уменьшил. Нам теперь необходимо его принудительно сжать. В этом нам поможет утилита DiskPart. Поскольку у меня докер работает на wsl, то в начале необходимо остановить wsl, введя команду wsl --shutdown
. Для проверки, что команда успешно отработало выполните wsl --list --verbose
. В выводе будет что-то подобное:

Далее выполним команду diskpart и нам откроется командная строка утилиты. Там нам необходимо ввести путь до нашего виртуального диска докера. Команда имеет такой синтаксис: select vdisk file="<Path to docker vhdx disk>"
. После выполнения команды утилита сообщит, что соответствующий виртуальный диск выбран.

Дальше остается вызвать команду сжатия диска: compact vdisk
. После завершения выполнения команды виртуальный диск станет занимать меньше места. В моем случае мне удалось освободить 30 Гб. Здесь все зависит от того, что конкретно вы почистили с помощью docker system prune
. Закрываем diskpart и не забываем в конце запустить вновь wsl просто введя wsl
.