* fix(docker): use node:22-trixie-slim instead of non-existent noble-slim * docs(adr): update ADR-030 for trixie-slim base image * docs(handoff): update handoff for trixie-slim and add watch out note * docs(handoff): set PR number * docs(handoff): add handoff for PR#73 * fix(ci): drop dangling ADR-031 ref in pr-73 handoff * docs(adr): add ADR-031 for PR#73 trixie-slim base image --------- Co-authored-by: opencode-agent <agent@opencode.local>
38 lines
No EOL
3.6 KiB
Markdown
38 lines
No EOL
3.6 KiB
Markdown
# ADR-031 (PR #73): Fix Docker base image — node:22-noble-slim → node:22-trixie-slim
|
||
|
||
## Статус
|
||
Accepted (2026-07-26)
|
||
|
||
## Контекст
|
||
|
||
ADR-030 (PR #71) зафиксировал переход base image на Debian trixie ради glibc ≥ 2.39 для `@mathew-cf/rag-cli`. Но PR#71 указал `FROM node:22-noble-slim` — тег, **не существующий** в Docker Hub:
|
||
|
||
- Проверка через Docker Hub API: `count=0` для `node:22-noble-slim`.
|
||
- Официальные образы `node` базируются **только на Debian**, не Ubuntu. Тегов `*-noble-slim` в официальном репо `library/node` нет вообще.
|
||
- При пересборке Dockerfile падает: `failed to resolve source metadata for docker.io/library/node:22-noble-slim: not found`.
|
||
|
||
Результат: PR#71 не собирается. Нужен реальный тег с glibc ≥ 2.39 (требование `@mathew-cf/rag-cli`, см. ADR-024 / ADR-030) и Node 22 LTS. PR#73 — fix follow-up к PR#71.
|
||
|
||
## Решение
|
||
|
||
```dockerfile
|
||
FROM node:22-trixie-slim
|
||
```
|
||
|
||
- `node:22-trixie-slim` — реальный тег, проверен через Docker Hub API (`count>0`).
|
||
- Debian 13 trixie → glibc 2.41 ≥ 2.39 — удовлетворяет требованию `@mathew-cf/rag-cli`.
|
||
- Node 22 LTS — совпадает с каналом PR#71, без мажорного обновления.
|
||
- Однострочное изменение в `Dockerfile`, остальное без правок.
|
||
- Дополнительно: Debian 13 **не использует snap** → chromium ставится через `apt-get install -y chromium` как обычный пакет, реальный browser, не transitional wrapper. Puppeteer-интеграция (`PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium`) работает as-is. На Ubuntu noble chromium — snap-пакет, что создавало known limitation; Debian trixie эту проблему снимает.
|
||
|
||
## Альтернативы
|
||
|
||
- **`node:lts-trixie-slim` (Node 24 LTS)** — отклонено: мажорное обновление Node 22→24. Установленные npm-пакеты (opencode-ai, repomix, `@mathew-cf/opencode-memory`) тестировались на Node 22 LTS; Node 24 не валидирован, риск несовместимости.
|
||
|
||
- **`node:trixie-slim` (latest = Node 26)** — отклонено: latest-тег = не LTS. Для production-образа требуется long-term support; latest дополнительно не pinned → drifting risk при `docker build`.
|
||
|
||
- **`node:22.23.1-trixie-slim` (pinned)** — отклонено: избыточная детализация для публичного репо. Pin патч-версии Node усложняет обслуживание (ручной bump) без выгоды; `node:22-trixie-slim` уже даёт детерминированный major+distro.
|
||
|
||
- **`debian:trixie-slim` + Node вручную (NodeSource или nvm)** — отклонено: сложнее, больше правок в Dockerfile (apt node = старая версия, нужен NodeSource apt-репозиторий или download tarball). `node:22-trixie-slim` уже включает Node 22 LTS — нулевая настройка.
|
||
|
||
- **`cargo install rag-cli` из исходников** — отклонено: +500MB Rust toolchain (rustc, cargo, crates.io deps), +10 мин build на каждом `docker build`, +image size. Смена base image — 0 дополнительных MB, готовый prebuilt binary работает as-is. |