fix(adapters): probe Docker daemon with docker version --format '{{.Server.Version}}' - #422
Open
santhiprakash wants to merge 2 commits into
Open
fix(adapters): probe Docker daemon with docker version --format '{{.Server.Version}}'#422santhiprakash wants to merge 2 commits into
santhiprakash wants to merge 2 commits into
Conversation
santhiprakash
force-pushed
the
fix/docker-health-ssh-exec-408
branch
from
August 4, 2026 23:16
53fcd19 to
4e8ad45
Compare
…Server.Version}}'`
Docker 29 removed the `.ServerVersion` template field from `docker info`, so
`docker info --format '{{.ServerVersion}}'` exits with a template error
("no such field: .ServerVersion") on healthy Docker 29+ daemons. This made the
Components tab mark Docker as Unhealthy on external SSH servers running Docker 29.
Switch the daemon probe to `docker version --format '{{.Server.Version}}'`, which
is the documented, stable server-version field across Docker 24-29+. Update
`docker-check.test.ts` to match the new command and assert it still targets a real
server version.
Closes oblien#408.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
santhiprakash
force-pushed
the
fix/docker-health-ssh-exec-408
branch
from
August 5, 2026 00:56
4e8ad45 to
7b76592
Compare
`secrets` is not a supported context in step `if` conditionals, so the
`e2e-docker` job's `if: ${{ secrets.DOCKERHUB_USERNAME != '' }}` caused the
workflow to fail validation before any job could start (run 30964881693).
Move the secret values into job-level `env` and switch the step `if` to
`env.DOCKERHUB_USERNAME`. This keeps the existing skip-when-unset behavior:
when the secret is missing the env is empty and the login step is skipped,
so Docker Hub pulls fall back to the anonymous rate limit path. When the
secret is configured, the step runs with the existing `with` inputs.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fix Docker health check false negatives on SSH-added external servers running Docker 29 by replacing the
docker info --format '{{.ServerVersion}}'probe withdocker version --format '{{.Server.Version}}'.Motivation
Closes #408.
On SSH-added servers running Docker 29, the Components tab reported Docker as unhealthy ("daemon not running") even though
docker infoanddocker psworked from the interactive Terminal tab. The root cause is that Docker 29 no longer exposes the.ServerVersiontemplate field indocker info, so the daemon probe exited with a template error (template: no such field: .ServerVersion).Related issue
Closes #408
Changes
daemonCommandfromdocker info --format '{{.ServerVersion}}'todocker version --format '{{.Server.Version}}', which is the documented, stable server-version field across Docker 24-29+.docker versionprobe.Problem
Concrete repro from #408: add an external server over password-auth SSH where Docker 29.7.1 is installed and running. The Components tab health check calls
checkDocker()->tryExec(executor, recipe.daemonCommand!)withdocker info --format '{{.ServerVersion}}'. On Docker 29 this producestemplate: no such field: .ServerVersion, sotryExec()returns an empty output andcheckDocker()reports the daemon as not running.Triage / Root cause
Docker 29 removed the
.ServerVersionfield from thedocker infoGo-template context.docker version --format '{{.Server.Version}}'is the documented cross-version way to read the server version.Fix
Use
docker version --format '{{.Server.Version}}'. It contacts the daemon and returns a positive server-version signal, socheckDocker()treats any non-empty output as "daemon running" and surfaces the underlying error on failure.Verification
Also verified locally on Docker 29.1.3:
Notes / Risks
SshExecutororcheckDocker()control flow.docker version --format '{{.Server.Version}}'is available across Docker 24-29+.Checklist
bun run test,bun run --cwd <workspace> lint, andbun formatall pass locally