can1357/oh-my-pi · error · Error
cannot detect docker server arch (got ${a || "nothing"}); is
Error message
cannot detect docker server arch (got ${a || "nothing"}); is docker running? What it means
dockerServerArch() runs `docker version --format {{.Server.Arch}}` and expects the daemon to report arm64/aarch64 or amd64/x86_64. If the output is empty, unparseable, or another arch string, the function throws because it cannot classify the daemon's native architecture for non-emulated task containers. The 'is docker running?' hint reflects that the most common cause is the Docker daemon being down or unreachable.
Source
Thrown at packages/metaharness/src/runner.ts:1047
}
/** Bun version pinned by the repo's `packageManager` field. */
function repoBunVersion(): string {
const raw = readJson(path.join(REPO_ROOT, "package.json"));
if (raw && typeof raw === "object") {
const pm = (raw as Record<string, unknown>).packageManager;
if (typeof pm === "string" && pm.startsWith("bun@")) return pm.slice("bun@".length);
}
return "1.4.0";
}
/** Native arch of the docker daemon (what non-emulated task containers run as). */
function dockerServerArch(): "arm64" | "x64" {
const r = spawnSync("docker", ["version", "--format", "{{.Server.Arch}}"], { encoding: "utf8" });
const a = (r.stdout ?? "").trim();
if (a === "arm64" || a === "aarch64") return "arm64";
if (a === "amd64" || a === "x86_64") return "x64";
throw new Error(`cannot detect docker server arch (got ${a || "nothing"}); is docker running?`);
}
/** Workspace member dirs (repo-relative), expanded from root package.json `workspaces.packages`. */
function workspacePackageDirs(): string[] {
const raw = readJson(path.join(REPO_ROOT, "package.json")) as {
workspaces?: { packages?: string[] };
} | null;
const dirs = new Set<string>();
for (const pattern of raw?.workspaces?.packages ?? []) {
for (const match of new Bun.Glob(`${pattern}/package.json`).scanSync({ cwd: REPO_ROOT })) {
dirs.add(path.dirname(match));
}
}
return [...dirs].sort();
}
/** Manifest files (repo-relative) that fully determine a `bun install` result. */
function sourceManifestFiles(pkgDirs: string[]): string[] {View on GitHub (pinned to 9690622007)
Solutions
- Start the Docker daemon (open Docker Desktop, or `sudo systemctl start docker`) and verify with `docker version --format '{{.Server.Arch}}'`
- Check DOCKER_HOST / docker context: run `docker context ls` and ensure the active context reaches a healthy daemon
- Confirm your Docker version is recent enough to report Server.Arch (`docker version`)
- If on an unsupported arch, run tasks on arm64 or x86_64 hardware/emulation
Example fix
// before (daemon down)
$ docker version --format '{{.Server.Arch}}'
cannot connect to the Docker daemon
// after
$ open -a Docker # or: sudo systemctl start docker
$ docker version --format '{{.Server.Arch}}'
arm64 Defensive patterns
Strategy: validation
Validate before calling
import { spawnSync } from "node:child_process";
function dockerReady(): boolean {
const r = spawnSync("docker", ["version", "--format", "{{.Server.Arch}}"], { encoding: "utf8" });
const arch = (r.stdout ?? "").trim();
return r.status === 0 && ["arm64", "aarch64", "amd64", "x86_64"].includes(arch);
}
if (!dockerReady()) throw new Error("start Docker first"); Type guard
function isKnownArch(a: string): a is "arm64" | "x64" {
return a === "arm64" || a === "aarch64" || a === "amd64" || a === "x86_64";
} Try / catch
try {
await runHarness();
} catch (err) {
if (err instanceof Error && err.message.includes("cannot detect docker server arch")) {
console.error("Docker daemon is not reachable; start Docker Desktop / dockerd and retry.");
} else throw err;
} Prevention
- Check `docker ps` as a preflight before launching the harness
- Keep Docker Desktop set to auto-start on login
- Pin DOCKER_HOST / docker context and validate it in CI setup steps
- Run benchmarks only on arm64/x86_64 hosts
When it happens
Trigger: Calling the metaharness runner while `docker version` returns non-zero (daemon stopped), stdout is empty, or the server arch string is unrecognized (e.g. 'arm', '386', or a placeholder from an old Docker version).
Common situations: Docker Desktop not started after reboot; DOCKER_HOST pointing at an unreachable/odd remote daemon; podman or a Docker shim that emits a different arch value; running on an uncommon architecture (e.g. linux/armv7) with no arm64 emulation.
Related errors
- docker not found on PATH (required to run task containers).
- Unable to resolve AWS credentials. Configure static environm
- imageUrls exposure "${name}" requires the ${name} binary on
- blob broker worker requires ${BLOB_BROKER_SOCKET_ENV} and ${
- ssh binary not found in PATH
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/c4df465b04a3b893.
Report an issue: GitHub.