Problem
gh devlake deploy local checks Docker availability and prints a warning when Docker Desktop isn't running, but then proceeds to call docker compose up anyway. This produces a confusing low-level pipe error:
π³ Checking Docker...
β οΈ Docker not found or not running
Install Docker Desktop: https://docs.docker.com/get-docker
π³ Building and starting containers in C:\Users\eldrickt\devlake-local...
(Building from source β this may take a few minutes on first run)
Error: docker compose up failed: exit status 1
...
open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
The Docker check at cmd/deploy_local.go:173-179 is a non-blocking warning β it never gates the startLocalContainers() call that follows.
Additionally, internal/docker/build.go defines a CheckAvailable() helper that is never called anywhere.
Proposed Solution
- Abort early when Docker is not available β return a clear error instead of continuing to
docker compose up.
- Use
docker.CheckAvailable() from internal/docker/build.go instead of the inline check β DRY up the duplicate logic.
- Improve the error message β tell the user exactly what to do (start Docker Desktop, then re-run) rather than dumping raw
docker compose output.
Expected behavior after fix:
π³ Checking Docker...
β Docker not found or not running
Install Docker Desktop: https://docs.docker.com/get-docker
Start Docker Desktop, then re-run: gh devlake deploy local
(command exits with non-zero status, no docker compose up attempt)
Scope of Changes
cmd/deploy_local.go β replace inline Docker check with docker.CheckAvailable() call; return error on failure instead of printing β οΈ and continuing.
internal/docker/build.go β no changes needed (helper already exists).
Acceptance Criteria
Problem
gh devlake deploy localchecks Docker availability and prints a warning when Docker Desktop isn't running, but then proceeds to calldocker compose upanyway. This produces a confusing low-level pipe error:The Docker check at
cmd/deploy_local.go:173-179is a non-blocking warning β it never gates thestartLocalContainers()call that follows.Additionally,
internal/docker/build.godefines aCheckAvailable()helper that is never called anywhere.Proposed Solution
docker compose up.docker.CheckAvailable()frominternal/docker/build.goinstead of the inline check β DRY up the duplicate logic.docker composeoutput.Expected behavior after fix:
(command exits with non-zero status, no
docker compose upattempt)Scope of Changes
cmd/deploy_local.goβ replace inline Docker check withdocker.CheckAvailable()call; return error on failure instead of printinginternal/docker/build.goβ no changes needed (helper already exists).Acceptance Criteria
deploy localaborts immediately after the check with a clear error messagedocker compose upattempt is made when Docker is unavailabledocker.CheckAvailable()is used instead of inlineexec.Commandcheckgo build ./...,go test ./...,go vet ./...all pass