# Docker на Mac — проблема с диском и сборкой образов _Последнее обновление: 2026-09-29_ > **2026-09-29: выполнена большая чистка, освобождено 41 ГБ** (57 ГБ → 16 ГБ, 61% → 17%). > Снесены `balda-executor`, `watchtower`, 16 неиспользуемых образов и buildkit-volume > 37.71 ГБ. Полный разбор — §«✅ Чистка 2026-09-29» в конце дока. > ⚠️ Цифры в §«Структура диска» ниже — снимок **2026-06-30** (17 ГБ / 8.4 ГБ кэша), > оставлены как исторический ориентир. Актуальные размеры — в разделе про чистку. ## Сетап | Параметр | Значение | |----------|----------| | Движок | Colima (не Docker Desktop!) | | Гипервизор | macOS Virtualization.Framework | | Архитектура | arm64 | | CPU | **8 ядер** | | RAM | **24 GiB** | | Диск VM | **100 GiB** (sparse) | | Mount type | virtiofs | ## Проблема: контейнеры (особенно Zulip) зависают во время сборки Docker образов для Валеры **Симптом:** Zulip перестаёт отвечать на вебхуки, RabbitMQ паникует, PostgreSQL тормозит. ## 🔴 Реальный корень — переполнение диска VM (не CPU, не bind mount) ### Структура диска Colima VM `/dev/vdb1` (98 GiB, data disk) хранит `/var/lib/docker`: ``` 17 GB — /var/lib/docker (Colima data) ├── 8.2 GB — rootfs/overlayfs ← слои всех образов ├── 8.9 GB — volumes │ ├── 8.4 GB — buildx_buildkit_arm64builder0_state ← 🔴 build cache volume │ ├── 341 MB — zulip_zulip-pgdata │ ├── 85 MB — dangling volume │ ├── 46 MB — openclaw_postgres-data │ └── 38 MB — zulip_zulip-data └── остальное — containers, buildkit metadata ``` ### Build cache volume — 8.4 GB и не чистится сам Docker BuildKit при использовании `buildx` хранит кеш слоёв в **Docker volume**, а не в overlayfs. Это volume `buildx_buildkit_arm64builder0_state`. **Почему не чистится:** - `docker system prune` чистит только build cache records (метаданные), НЕ volume - BuildKit контейнер (`moby/buildkit:buildx-stable-1`) всегда running — volume считается активным - BuildKit GC policy не видит этот volume как «своё» хранилище (это Docker volume, не `/var/lib/buildkit`) - Без ручной очистки volume растёт с каждой сборкой и не уменьшается **Почему аффектит контейнеры:** 1. Каждая сборка Валеры добавляет новые слои в этот volume 2. Volume растёт (8.4 GB и выше) 3. Когда `/dev/vdb1` заполняется >85-90%: - Docker overlayfs + containerd snapshotter начинают тормозить - Запись новых слоёв фейлится или идёт в разы медленнее - PostgreSQL и RabbitMQ WAL не могут закоммититься - RabbitMQ Khepri (Raft) при проблемах с WAL сбрасывает состояние (пользователи пропадают) - Zulip отдаёт 500 на `/api/v1/register` - Контейнеры тупят или падают в restart loop ### Чистка build cache (безопасно — не трогает образы, контейнеры, volumes) **`docker builder prune --all --force`** — удаляет только временный build cache (промежуточные слои сборок). Не затрагивает: - Образы (SDK, libs, рантаймы) — `docker images` не меняется - Контейнеры (запущенные и остановленные) - Volumes (включая БД) - Networks ```bash # Полная очистка build cache docker builder prune --all --force ``` При следующей сборке: если образ уже собран и его слои есть в overlayfs, BuildKit пересоберёт только то, что изменилось в Dockerfile. Базовые `apt-get install` / `pip install` придётся перевыполнить, если их слой был закэширован. **Щадящая чистка** (оставляет свежий кэш <24h): ```bash docker builder prune --filter 'until=24h' --force ``` Не полностью решает проблему — volume фрагментирован, место не reclaim-ится. ### Чистка build cache volume (агрессивно — перекачка с нуля) ```bash # Остановить buildkit контейнер, удалить volume, BuildKit пересоздаст при следующем билде docker rm -f buildx_buildkit_arm64builder0 docker volume rm buildx_buildkit_arm64builder0_state ``` Мониторинг заполненности диска VM: ```bash colima ssh -- df -h /dev/vdb1 ``` ### Связанные документы - [[tech/docker_colima_setup]] — установка и автостарт Colima - [[projects/balda/setup]] — Balda агенты (Валера, Клавдий) - [[how-to/hermes-eagle-mac]] — Hermes на Mac, Zulip Docker стек (RabbitMQ pitfall про Khepri) - [[how-to/openmediavault-rpi5]] — build cache на RPi (та же проблема ENOSPC) ## ✅ Чистка 2026-09-29 — освобождено 41 ГБ По команде Alex: снести неиспользуемые образы, `balda-executor`, `watchtower`, balda-теги старого стека и слои сборки. | Метрика | До | После | |---|---|---| | **VM disk `/dev/vdb1`** | **57 ГБ (61%)** | **16 ГБ (17%)** | | Images | 19.12 ГБ | 15.71 ГБ | | Build Cache | 1.91 ГБ | 1.62 ГБ | | **buildkit volume** | **37.71 ГБ** | **удалён** | 🔴 **Главное подтверждение из этого дока:** `docker builder prune` НЕ чистит volume `buildx_buildkit_arm64builder0_state` — он оставался **37.71 ГБ** после prune. Реально освободило только удаление контейнера + volume: ```bash docker rm -f buildx_buildkit_arm64builder0 docker volume rm buildx_buildkit_arm64builder0_state ``` 📌 **Обратная сторона:** `docker builder ls` → `arm64builder0` теперь **`inactive`**. Следующая сборка пересоздаст volume с нуля — все закэшированные слои (apt/pip/go mod download) потеряны. Это ожидаемая цена, не дефект. ### Что снесено (16 образов + 3 контейнера) Контейнеры: `balda-executor`, `watchtower`, `buildx_buildkit_arm64builder0`. | Образ | Размер | |---|---| | `balda-executor:0.1.0` | 2.48 ГБ | | `obsidian-mcp-image:0.1.0` | 1.67 ГБ | | `balda-executor-mcp:0.2.0` | 249 МБ | | `balda-executor-mcp:0.1.0` | 231 МБ | | `containrrr/watchtower:latest` | 21.5 МБ | | `balda-mm:0.1.10` / `0.1.12` / `0.1.13-diag` | 3 × 78.7 МБ | | `caddy`, `curlimages/curl`, `eclipse-mosquitto`, `tagwriter`, `teddysun/xray`, `ubuntu:noble`, `alpine:3.20`, `alpine:latest` | ~0.9 ГБ | ### ⚠️ Побочный эффект: Watchtower снят с Mac Watchtower жил в compose-проекте `infra` (`~/Docker/infra`). **Автообновление образов на Mac больше не работает.** Обновлять вручную: ```bash cd && docker-compose pull && docker-compose up -d ``` 📌 На **Kraken** Watchtower тоже есть — он там отдельная история (и сам провоцировал падение `mm-postgres`, см. `personal/tech/kraken-docker-startup-order.md`). ### 🔴 Питфолл: `compose down` НЕ удаляет образы После `docker-compose down` контейнер уходит, а **образ остаётся**. Для полного сноса нужен отдельный `docker rmi `. Именно так остались висеть `balda-executor:0.1.0` (2.48 ГБ) и `containrrr/watchtower:latest`. ### 🔴 Питфолл: «unused image» по имени может быть тем же ID, что running `obsidian-mcp-image:0.1.0` и `obsidian-mcp-obsidian-mcp:latest` — **разные образы** (разные ID), первый был артефактом сборки. Но у `budget-*` / `fast-rlm-*` / `zulip-router` тег `:latest` — **тот же ID**, что у безымянного образа, используемого контейнером. Удаление такого тега безвредно (слои остаются), но **проверять ID, а не имя**. ### Бэкап перед чисткой `/Users/admin/.hermes/hermes-whale/backups/20260929-121946-docker-cleanup/` - `balda-executor/` — Dockerfile, compose.override.yaml, docker-compose.yml, agents-mounts.yaml, tools/ - `infra/` — docker-compose.yaml (где был watchtower) ### Осталось (не снесено, осознанно) ~~`balda-mm:0.1.13`, `0.1.14`, `0.1.15-pr8-*`, `balda:mm-classifier` (~560 МБ)~~ ✅ **Снесены вторым заходом 2026-09-29.** Alex: «ветки сноси, там щас новый релиз будет, пересобирать будем всё». Снесено: `balda-mm:0.1.13`, `0.1.14`, `0.1.15-pr8-5360e90b`, `0.1.15-pr8-5360e90b-runtime210`, `0.1.15-pr8-0e6d63aa-runtime210`, `balda:mm-classifier`. **На Mac balda-образов не осталось** — чистое поле под новый релиз. ```bash # Проверка перед сносом (обязательно): ни один живой контейнер не использует образ docker ps --format '{{.Names}} {{.Image}}' | grep -i balda # → пусто ``` ### Итог чистки 2026-09-29 | Метрика | До | После | |---|---|---| | **VM disk `/dev/vdb1`** | **57 ГБ (61%)** | **16 ГБ (17%)** | | Images | 44 шт / 26.45 ГБ | 19 шт / 15.27 ГБ | | Containers | 22 | 16 | | Build Cache | 8.63 ГБ | 1.62 ГБ | | buildkit volume | 37.71 ГБ | удалён | **Освобождено суммарно ≈ 41.6 ГБ.** ### Готовность к сборке нового релиза - ✅ `arm64builder` пересоздастся сам при первой сборке (сейчас `inactive`) - ✅ Кэш слоёв пуст — сборка пойдёт с нуля (apt/pip/go mod download заново) - ✅ Старых тегов нет — коллизий имён не будет - ⚠️ Сборка: `docker-compose build --no-cache` либо `docker buildx build --builder arm64builder --platform linux/arm64 --provenance=false --load` ⚠️ **На Kraken ничего не снесено** — там `balda-executor-mcp` работает, текущий рабочий образ `balda-mm:0.1.15-pr8-480ec821-runtime210`. ### Живые контейнеры (16, все рабочие) ``` zulip-zulip-1 zulip-database-1 zulip-rabbitmq-1 zulip-memcached-1 zulip-redis-1 zulip-router firecrawl-api-1 firecrawl-playwright-service-1 firecrawl-rabbitmq-1 firecrawl-redis-1 budget-backend budget-frontend obsidian-mcp asana-mcp fast-rlm-mcp portainer ``` Не тронуто: 14 volumes (719 МБ — БД Zulip/Postgres), сеть `balda_default`, папки кода `~/Developer/balda`, `~/Docker/balda-agent`, `~/docker/balda-executor`, `~/Docker/infra`. ## Apple Container — потенциальная замена Colima Apple Container (`apple/container`, Apache 2.0, v1.0.0, Jun 9 2026) — нативная Swift-утилита для Linux контейнеров на macOS 26. **VM-per-container** через Virtualization.framework (не shared-kernel). OCI-совместима, pull/push с любых registry. **Не заменяет Colima сейчас** — нет compose, нет buildx. При появлении compose-аналога может решить проблему build cache принципиально (архитектура VM-per-container не имеет одного volume, где всё гниёт). Пока — следить за релизами. [[personal/documents/deferred-tasks]]