Files
obsidian-vault/personal/tech/docker-mac-disk-issues.md
T

3.8 KiB
Raw Blame History

Docker на Mac — проблема с диском и сборкой образов

Последнее обновление: 2026-06-24

Сетап

Параметр Значение
Движок 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 volume (безопасно)

# Остановить buildkit контейнер, удалить volume, BuildKit пересоздаст при следующем билде
docker rm -f buildx_buildkit_arm64builder0
docker volume rm buildx_buildkit_arm64builder0_state

Мониторинг заполненности диска VM:

colima ssh -- df -h /dev/vdb1

Связанные документы