opencode-config/docs/decisions/031-pr-73-base-image-trixie-slim.md
Sergey 92d21a142c
fix(docker): use node:22-trixie-slim instead of non-existent node:22-noble-slim (#73)
* 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>
2026-07-26 04:43:03 +03:00

3.6 KiB
Raw Blame History

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.

Решение

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.