Docker занимает место на моём Mac

Docker Desktop хранит всё в одном файле. Он растёт при каждой сборке, а удаление образов его не уменьшает. Вот почему так и что на самом деле возвращает место.

Бесплатно для загрузки и сканирования. Для очистки нужна лицензия: один платёж на компьютер, Mac или Windows.

Хранилище: тримап домашней папки размером 297,8 ГБ по категориям

Где именно место

На Mac Docker Desktop хранит всё внутри виртуальной машины Linux, а весь диск этой машины представляет собой один разреженный файл:

~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

Проверьте его реальный размер на диске — не логический, который всегда равен максимуму, разрешённому вами для Docker:

du -h -d0 ~/Library/Containers/com.docker.docker/Data/vms/0/data/

Почему удаление образов его не уменьшает

Удалите образ, и место освободится только внутри виртуальной машины. Файл на вашем Mac остаётся таким же большим, потому что macOS уже выделила ему столько места. Свежие версии Docker Desktop отправляют TRIM изнутри виртуальной машины, и это позволяет macOS забрать освобождённые блоки, но происходит это по расписанию Docker, а не в момент очистки командой prune. До тех пор docker system df сообщает об освобождённых гигабайтах, а Finder не показывает никаких изменений.

Как вернуть место

По порядку: от наименее разрушительного.

1. Запросите у Docker его собственные итоги

Всегда начинайте отсюда. Команда разделяет образы, контейнеры, тома и кэш сборки и показывает, сколько из каждого можно вернуть.

docker system df -v

2. Очистите кэш сборки

На машине, где образы собираются регулярно, это обычно самый крупный пункт и самый безопасный для удаления — единственная плата в том, что следующая сборка будет медленнее.

docker builder prune -a

3. Уберите то, что действительно не используется

Остановленные контейнеры, повисшие образы и неиспользуемые сети:

docker system prune

Добавьте -a чтобы удалить ещё и все образы, не занятые работающим контейнером, — их придётся скачивать заново. Добавляйте --volumes только если уверены: в томах базы данных хранят свои данные, и это единственная команда на этой странице, которая уничтожает то, что нельзя скачать снова.

4. Посмотрите список томов, прежде чем их трогать

Проверьте, что именно будет удалено:

docker volume ls
docker volume ls -f dangling=true

5. Заставьте macOS вернуть место в файле

После очистки у Docker Desktop есть штатный способ вернуть освобождённые блоки: Настройки → Ресурсы → Дополнительно → Использование дискалибо выход и повторный запуск Docker Desktop, который запускает TRIM при старте. Дайте минуту и проверьте размер файла заново, прежде чем решать, что не сработало.

6. Уменьшите лимит диска

В разделе Настройки → Ресурсылимит виртуального диска определяет, до какого размера Docker.raw разрешено расти. Само по себе уменьшение ничего не освободит, но ограничит проблему. Именно привычка поднимать лимит «на всякий случай» и довела файл до 64 ГБ.

7. Крайняя мера

Настройки → Устранение неполадок → Clean / Purge data полностью сбрасывает диск виртуальной машины и возвращает файл почти к нулю. Это удаляет все ваши образы, контейнеры и тома. Пользуйтесь этим, когда ничего другое не помогло и вы знаете, что лежит в томах.

Не удаляйте Docker.raw через Finder. Это не файл кэша, а данные всей установки Docker; удаление его при работающем Docker может оставить виртуальную машину в состоянии, из которого всё равно понадобится сброс.

Тоже стоит проверить

Docker редко бывает один

На том Mac, где Docker дорос до 50 ГБ, DerivedData в Xcode и локальные модели ИИ обычно идут следом. Если вы освобождаете место, стоит один раз измерить весь диск, а не чинить по одной вещи за раз. Полный список

В Linux файла образа нет

Docker в Linux пишет прямо в /var/lib/dockerпоэтому prune освобождает место сразу, и описанной выше проблемы с TRIM не возникает. Очистка в Linux

Вопросы

Безопасно ли удалять Docker.raw?

Не через Finder и не при работающем Docker. Этот один файл — все ваши образы, контейнеры и тома. Если вы действительно хотите начать с чистого листа, используйте «Устранение неполадок → Clean / Purge data» в Docker Desktop: это делает то же самое, но так, как Docker ожидает.

Почему docker system prune пишет, что освободил 20 ГБ, а ничего не изменилось?

Потому что он освободил 20 ГБ внутри файловой системы виртуальной машины, а не на вашем Mac. Файл сохраняет размер, пока не отработает TRIM и macOS не заберёт блоки обратно. Обычно это запускается выходом и повторным открытием Docker Desktop.

Удалит ли docker system prune мои базы данных?

Только если добавить --volumes. Без этого флага тома не трогаются. С ним удаляется любой том, не подключённый к контейнеру, а том остановленной базы данных считается неподключённым.

Каким должен быть размер Docker.raw?

Единственно верного ответа нет, но на машине с несколькими активными проектами 15–25 ГБ — это нормально, а 60 ГБ означает, что кэш сборки не очищали ни разу. Проверьте docker system df -v прежде чем считать, что дело в образах.

Из блога

Короткие статьи, которые подробнее раскрывают отдельные части этого руководства.

Все статьи