fix(upgrade): pin docker pull platform off DEVICE_TYPE#2814
fix(upgrade): pin docker pull platform off DEVICE_TYPE#2814vpetersson wants to merge 1 commit intomasterfrom
Conversation
Docker 29.4.x on Trixie has been observed advertising `linux/arm/v8` (32-bit ARMv8) as the host platform on aarch64 Pi 4 hosts, which doesn't match the single-platform `linux/arm64/v8` manifest we publish for `pi4-64` and breaks `docker compose pull` with "no matching manifest for linux/arm/v8". We already derive the correct platform from `/proc/device-tree/model`, so set DOCKER_DEFAULT_PLATFORM explicitly off DEVICE_TYPE rather than relying on Docker's host auto-detect. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
|
Superseded by the ansible-side fix on `fix/ansible-docker-arch-reconciliation` (PR coming). Diagnosis got further than this PR: the `linux/arm/v8` platform error wasn't a Docker host-detection bug, it was a downstream symptom of `docker-ce:armhf` getting installed on aarch64 Pi 4 hosts. Root cause is a regression introduced in #2779 — the Trixie upgrade renamed `DEVICE_TYPE` from `pi4` to `pi4-64` in `bin/install.sh` / `bin/upgrade_containers.sh` / `ansible/site.yml` validator, but missed the conditional in `ansible/roles/system/tasks/docker.yml`, which still checks `device_type in ['pi4', 'pi5']`. Every Pi 4 host that ran `bin/run_upgrade.sh` after #2779 merged on 2026-04-30 had its docker-ce silently swapped from arm64 to armhf — confirmed via apt history on a live device (arm64 install on 2026-04-28, armhf re-install on 2026-05-02). This PR's `DOCKER_DEFAULT_PLATFORM` pin would only have worked around the manifest match step; the seccomp filter on an armhf daemon would still SIGSYS containers at runtime regardless. Ansible-side fix is the correct layer. |



Issues Fixed
Reported on a Pi 4 running 64-bit Raspberry Pi OS Trixie with Docker Engine 29.4.2:
uname -misaarch64,dpkg --print-architectureisarm64,docker inforeportsArchitecture: aarch64, and the GHCR manifest forlatest-pi4-64exposes a cleanarm64/linuxentry — yet the daemon requestslinux/arm/v8(32-bit ARMv8) and fails to match.docker pull --platform linux/arm64 …succeeds, confirming this is host-platform auto-detect on Docker 29.4.x mis-classifying the host.Description
bin/upgrade_containers.shalready derivesDEVICE_TYPEfrom/proc/device-tree/model, so we know the correct platform without trusting Docker's host detection. SetDOCKER_DEFAULT_PLATFORMexplicitly:pi4-64,pi5→linux/arm64pi2,pi3→linux/arm/v7x86→linux/amd64The existing
sudo -E docker compose pullpropagates the export. No build-pipeline / image-builder change needed — the published manifests are correct.Checklist