ADR-0009: One dev container, at the root¶
Status: Accepted Date: 2026-09-30 Deciders: Alex Nodeland
Supersedes the dev containers of artifactr ADR-0030 and reflexr ADR-0021, and the override that joined them to stackr's network in artifactr ADR-0040 and reflexr ADR-0037.
Context¶
RFC-0003's Dev container section replaces the packages' dev containers with one at the root, running Docker inside it, and supersedes artifactr ADR-0030 and reflexr ADR-0021. The setup brought a basic container, and phase 7 brings the rest. The RFC left two things unsaid: what the basic container is built on, and what becomes of artifactr ADR-0040 and reflexr ADR-0037. Those built each library's container on its contributor compose.yaml, and their initializeCommand wrote an override that joined the container to the stackr network when stackr's stack was running.
Decision¶
- The container is an image, not a Compose service:
mcr.microsoft.com/devcontainers/base:jammy, with the GitHub CLI, Node, which runs the Supabase CLI throughnpx, and Docker-in-Docker. - It is built on nothing in the packages: no Compose file, no
initializeCommand, and no package's environment. - The override retires. stackr's stack runs on the container's own Docker, so its published ports are the container's, such as the Collector's at
localhost:4317. A reference implementation still joins thestackrnetwork through its library'scompose.stackr.yaml, on the same Docker. - The rest of those ADRs stands: each library's contributor
compose.yamlandcompose.stackr.yaml.
Consequences¶
- Easier: one container, which no package's files can break, opens the whole family.
- Harder: its Docker starts empty. Images the host already has are pulled again inside, and a stack started on the host isn't visible from the container.
- Harder: nothing builds the container in CI until phase 7's prebuilt image, so a change that breaks it shows only when someone rebuilds it.