[2026-09-26] eagle: family/documents/vault-sync/2026-09-26-syncthing-clone-root-objects-acl-confusion.md family/how-to/vault-git-sync.md personal/plans/balda-mm-phase4-agents.md personal/tech/docker_colima_setup.md personal/tech/macos-docker-virtiofs-mount-limits.md personal/tech/truenas-nfs4-acl-and-arrmultiuser.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 15:52:55 +06:00
1 parent 8efe5c8970
commit f482778257
6 files changed
+330 -25

No files matched your search

@@ -1,15 +1,16 @@
# macOS Docker Desktop — что НЕ проезжает в контейнер (virtiofs)
> Создан 2026-09-26. Статус: **проверено живыми тестами** (alpine:3.20, linux/arm64,
> Docker Desktop на macOS 26.6.1, Apple Silicon).
> **Colima** на macOS 26.6.1, Apple Silicon; `colima start --cpu 8 --memory 24 --disk 100`).
> Тема: границы проброса путей из мира macOS в контейнер.
> Все выводы получены прогонами, не по памяти. Команды воспроизведения — в §5.
> Все выводы получены прогонами, не по памяти. Команды воспроизведения — в §6.
---
## 0. Главный вывод одной строкой
На macOS Docker Desktop отдаёт контейнеру файлы **не через Linux `mount`**, а через
На macOS рантайм контейнеров (Colima, Docker Desktop) отдаёт контейнеру файлы
**не через Linux `mount`**, а через
**virtiofs** — демон, который строит маппинг путей **в момент старта контейнера**
и знает только пути **мира macOS**, известные ему на старте.
@@ -160,6 +161,55 @@ ln /tmp/a /tmp/b # → Operation not permitt
---
## 8. ⚠️ Реализация на macOS: `docker-compose`, а не `docker compose`
Проверено 2026-09-26 на этой машине (Docker CLI 29.4.1, macOS 26.6.1, Apple Silicon).
Compose здесь — **отдельный бинарь**, не подкоманда `docker`:
| Что | Значение |
|---|---|
| CLI | `/opt/homebrew/bin/docker` (v29.4.1) |
| buildx | плагин, симлинк в `~/.docker/cli-plugins/docker-buildx` |
| compose | `/opt/homebrew/bin/docker-compose` (**v5.1.3**), симлинк в `/opt/homebrew/lib/docker/cli-plugins/` |
```bash
docker compose config # → docker: unknown command: docker compose
docker compose config --quiet # → unknown flag: --quiet
docker-compose config # ✅ работает
docker-compose config --services
```
📌 **Всегда `docker-compose` (с дефисом) в этом окружении.** Сообщение об ошибке
выглядит как «docker не знает такой команды», а не «compose не установлен» — легко
принять за сломанный Docker.
⚠️ Дефолтный билдер (`default` → `/var/run/docker.sock`) в статусе **`error`**.
Для arm64-сборок использовать именованный билдер:
```bash
docker buildx build --builder arm64builder --platform linux/arm64 \
--provenance=false --load -t <tag> .
```
### Порядок файлов при генерации override
`compose.override.yaml` подхватывается compose **автоматически**, но если он ссылается на
несуществующий путь на хосте, `up` падает на монтировании. Поэтому порядок строго такой:
```
1. .env ← env_file, иначе up падает сразу
2. agents-mounts.yaml ← манифест (можно пустой: mounts: [])
3. tools/render-mounts.py ← → compose.override.yaml
4. docker-compose up -d
```
### Ловушка: `deploy.resources.limits` в не-swarm compose
Секция `deploy.resources.limits.memory` **молча игнорируется** запуском через
`docker-compose up` (это формат swarm). Лимит создаёт ложное ощущение защиты —
что-то ограничивать нужно иначе (cgroups напрямую или `mem_limit`, зависят от версии).
---
## Связанные заметки
- [[personal/plans/balda-mm-phase4-agents]] — применение этих выводов (Фаза 4)
- [[personal/projects/balda/balda-mm-delegation-plan]] — общий план проекта