You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Sandbox create fails with HTTP 400 on Docker API 1.52: client hardcodes /v1.54, and the SDK error drops the daemon's reason #457
Version: v1.1.0 (9f97a7e). Ubuntu 24.04.5 (kernel 7.0.0-1014-gcp), Node 24.21.0. Docker 29.1.3 (API 1.52) for the failure, then docker-ce 29.9.2 (API 1.56) for the success.
Repro:
Install Docker 29.1.3 (docker version → server API 1.52).
LayerFS.open and sandbox.create() with image debian:bookworm-slim (sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8). No runtime image is needed: the failure comes at the volume step, before any container starts.
The SDK rejects with phase: Volume, transfer status: Some(400), an 84-byte error body, and no message text. Separately, direct probes on the Docker socket (POST /v1.54/volumes/create and GET /v1.54/version) each return 400 with the body {"message":"client version 1.54 is too new. Maximum supported API version is 1.52"} plus a newline. That is 84 bytes, the same size as the SDK's error_body.
Upgrade to docker-ce 29.9.2 (API 1.56). The same sandbox.create() succeeds. Reproduced on two runs.
Expected: the docs state the minimum Docker API version, the SDK error carries the daemon's message, or the client negotiates the API version.
Actual: the client hardcodes /v1.54. core/crates/layerfs-sandbox/src/backend/docker/container.rs:47 (plain_volume, GET /v1.54/volumes/{name}) and :106–107 (POST /v1.54/containers/create). The SDK error at step 3 does not include the daemon's text, so the reason is visible only by calling the socket directly. The only volume request in LayerFS's source is the GET at container.rs:47; the source has no POST /v1.54/volumes/create, so that probe is not a request LayerFS sends. We infer that the failing request at phase Volume is the :47 GET. We did not observe the SDK's request itself. The 1.54 requirement is mentioned in core/docs/architecture/71-ordinary-engine-runtime-foundation.md; the README and api/README.md mention Docker only in test setup.
Dedupe (Ephemeral-AI-Lab/layerfs, searched 10-26): "too new" 0 hits; "API version" 0 hits; "1.54" 5 hits, none about the Docker API.
Request: document the minimum Docker API version with the install requirements, and have the SDK surface the daemon's error message, or negotiate the API version.
I work on Commonly (commonly.me). Written with AI assistance; the repro was run as described, and the quotes were checked at 9f97a7e.
Thanks for #459. A Sandbox create the daemon refuses now carries Docker's reason, and the Engine API requirement is documented, which covers the error half of this issue. Requests still go to v1.54, as #459 notes, and the documented requirement seems a fair answer to that half. We'll confirm on Docker 29.1.3 the next time we run that setup.
Happy for this to be closed if you consider it resolved.
I work on Commonly (commonly.me). Written with AI assistance.
Activity
Surface Docker error details in sandbox failures
Merge #459: Surface Docker error details in sandbox failures
lilyshen0722 commentedon Oct 27, 2026
Thanks for #459. A Sandbox create the daemon refuses now carries Docker's reason, and the Engine API requirement is documented, which covers the error half of this issue. Requests still go to v1.54, as #459 notes, and the documented requirement seems a fair answer to that half. We'll confirm on Docker 29.1.3 the next time we run that setup.
Happy for this to be closed if you consider it resolved.
I work on Commonly (commonly.me). Written with AI assistance.
fix(sandbox): negotiate the Docker Engine API version (#457)
Merge pull request #476 from lilyshen0722/fix/docker-api-negotiation