13 KiB
Executable File
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 растёт с каждой сборкой и не уменьшается
Почему аффектит контейнеры:
- Каждая сборка Валеры добавляет новые слои в этот volume
- Volume растёт (8.4 GB и выше)
- Когда
/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
# Полная очистка build cache
docker builder prune --all --force
При следующей сборке: если образ уже собран и его слои есть в overlayfs, BuildKit пересоберёт только то, что изменилось в Dockerfile. Базовые apt-get install / pip install придётся перевыполнить, если их слой был закэширован.
Щадящая чистка (оставляет свежий кэш <24h):
docker builder prune --filter 'until=24h' --force
Не полностью решает проблему — volume фрагментирован, место не reclaim-ится.
Чистка build cache volume (агрессивно — перекачка с нуля)
# Остановить buildkit контейнер, удалить volume, BuildKit пересоздаст при следующем билде
docker rm -f buildx_buildkit_arm64builder0
docker volume rm buildx_buildkit_arm64builder0_state
Мониторинг заполненности диска VM:
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:
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 больше не работает. Обновлять вручную:
cd <compose-dir> && 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 <image>. Именно так остались висеть
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)
Осталось (не снесено, осознанно)
~
✅ Снесены вторым заходом 2026-09-29. Alex: «ветки сноси, там щас новый релиз будет,
пересобирать будем всё».balda-mm:0.1.13, 0.1.14, 0.1.15-pr8-*, balda:mm-classifier (560 МБ)
Снесено: 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-образов не осталось — чистое поле под новый релиз.
# Проверка перед сносом (обязательно): ни один живой контейнер не использует образ
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