3.3 KiB
adr-0005: Контейнеры оркестратора бегут под uid:gid хоста (1000:1000)
- Статус: accepted
- Дата: 2026-06-06
- Задача: ORCH-040
Контекст
Оба контейнера (orchestrator, orchestrator-staging) запускались под uid=0 (root) и
монтировали хостовый /home/slin/repos → /repos (rw). Claude-CLI агенты исполняются
subprocess.Popen внутри контейнера под тем же root, поэтому все артефакты конвейера
(git worktree, коммиты в docs/) появлялись на хосте как root:root. Деплой прода под
slin (uid 1000) ломался на правах git до ручного chown. Это сквозное свойство рантайма:
касается агентов всех проектов, а не отдельной фичи.
Решение
Оба сервиса в docker-compose.yml запускаются под user: "1000:1000" (uid:gid хоста slin).
group_add: ["999"]сохраняется — доступ к docker.sock идёт через gid 999, не через root.- target SSH-маунта приведён к
/home/slin/.ssh(был/root/.ssh), синхронно сHOME=/home/slin, который форсит launcher → единый HOME по осям uid/claude/ssh. - Образ и launcher не меняются: numeric uid не требует записи в
/etc/passwd,git config --system safe.directory '*'уже есть.
Обязательные host-prerequisites (Owner, вне кода): доступ uid 1000 к
/home/slin/.claude/.credentials.json (блокер), ssh-ключи в новом HOME, рестарт prod
только в окно тишины. Детали и команды — work-item ADR-001 и docs/operations/INFRA.md.
Альтернативы
- drop-privileges только для subprocess агента (
gosu/setuid) — контейнер остаётся root; новый код в горячем пути launcher, два uid в одном контейнере; отклонён. - chown-хук после каждой стадии — лечит симптом, требует root внутри контейнера (несовместимо), хрупкий пост-шаг; отклонён (fallback на крайний случай).
Последствия
- Артефакты создаются под
slin:slin; деплой прода не требует ручногоchown. - HOME консистентен (uid = claude = ssh =
/home/slin); устранён рассинхрон SSH-маунта. - Появляется явная привязка рантайма к uid 1000 хоста (задокументирована в INFRA.md).
- Прод-рестарт self = групповой риск (общий инстанс с enduro-trails) → строго окно тишины; страховка — staging-гейт (adr-0003).
Связи
adr-0003 (staging-гейт — обязательная проверка перед прод-рестартом self),
adr-0001 (is_self_hosting_repo), work-item docs/work-items/ORCH-040/06-adr/ADR-001-run-agents-as-host-uid.md.