From c0bce8352acf5855f5cefe61c799ca0ee3a91186 Mon Sep 17 00:00:00 2001 From: bilby91 Date: Fri, 12 Jun 2026 15:05:27 -0300 Subject: [PATCH] devcontainer: pin docker-in-docker to 2.x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ":1" pin resolves to a stale frozen 1.x image (the feature has no 1.x releases anymore — it's at 3.x). That old script runs a global `pip install docker-compose` on bookworm/arm64, which fails under PEP 668 (externally-managed-environment) — the arm64 prebuild failure that survived the bookworm pin (#89), the v2-plugin switch (#90), and the dockerDashComposeVersion=none change (#91), because none of them affect which feature version runs. 2.x gates the entire compose/pip block behind `!= none`, so with dockerDashComposeVersion=none there is no pip on arm64 at all. amd64 was unaffected (it gets a prebuilt v1 binary). `docker compose` v2 still comes from the moby-compose package. Co-Authored-By: Claude Opus 4.8 --- .devcontainer/devcontainer-build.json | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.devcontainer/devcontainer-build.json b/.devcontainer/devcontainer-build.json index c7f3f49..4c74cd4 100644 --- a/.devcontainer/devcontainer-build.json +++ b/.devcontainer/devcontainer-build.json @@ -14,14 +14,17 @@ "version": "1.26" }, "ghcr.io/devcontainers/features/github-cli:1": {}, - "ghcr.io/devcontainers/features/docker-in-docker:1": { - // "none" skips the legacy `docker-compose` (hyphen) command entirely. - // The repo only uses `docker compose` v2 (runtime/docker/compose.go: - // "legacy docker-compose is not supported"), and the v2 plugin is - // installed separately via the moby-compose package regardless of this - // option. Avoiding the hyphen command is what unblocks arm64: the - // released feature installs Compose v1 there via a global `pip install`, - // which fails on bookworm under PEP 668 (externally-managed-environment). + "ghcr.io/devcontainers/features/docker-in-docker:2": { + // Pin to the 2.x major: ":1" is a stale frozen image (the feature has + // no 1.x releases anymore — current is 3.x) whose old script runs a + // global `pip install docker-compose` on bookworm/arm64 and fails under + // PEP 668 (externally-managed-environment). 2.x gates that whole block + // behind `dockerDashComposeVersion != none`. + // + // "none" skips the legacy `docker-compose` (hyphen) command entirely; + // the repo only uses `docker compose` v2 (runtime/docker/compose.go: + // "legacy docker-compose is not supported"), and the v2 plugin ships + // separately via the moby-compose package regardless of this option. "dockerDashComposeVersion": "none" }, "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {