Install
Running in under a minute
Pick a route. All four end at http://127.0.0.1:8470, where you create the admin account and scan a QR code for 2FA. Needs Docker Engine 24 or newer (API 1.43+).
Multi-arch (amd64/arm64), distroless, non-root, read-only root filesystem.
docker run -d --name dockercmd \
-p 127.0.0.1:8470:8470 \
--group-add "$(stat -c '%g' /var/run/docker.sock)" \
--read-only --tmpfs /tmp \
--security-opt no-new-privileges \
--cap-drop ALL \
-v /var/run/docker.sock:/var/run/docker.sock \
-v dockercmd-data:/data \
ghcr.io/koduj-dev/docker-commander:latestOn rootless Docker or Docker Desktop the socket is owned by your user — drop the --group-add line. In production, pin an immutable @sha256 digest instead of :latest.
macOS and Linux. Installs the signed release binary for your OS and architecture.
brew install koduj-dev/tap/dockercmd
dockercmd --versionGrab your OS and architecture from the Releases page. Debian/Ubuntu and Fedora users can take a .deb or .rpm, which sets up the systemd service.
chmod +x dockercmd-linux-amd64
./dockercmd-linux-amd64 # http://127.0.0.1:8470
sudo ./dockercmd-linux-amd64 --install-service # optional: run it 24/7On Windows, run dockercmd-windows-amd64.exe from a terminal.
Needs Go ≥ 1.25 and Node.js ≥ 18 to build the UI, plus a running Docker daemon.
git clone https://github.com/koduj-dev/docker-commander.git
cd docker-commander
make build # builds the UI, then embeds it in the binary
./dockercmd # http://127.0.0.1:8470Or, without the UI build step: go install github.com/koduj-dev/docker-commander/cmd/dockercmd@latest
Compatibility
Tested against real Docker, not assumed
Most tools just claim a version floor. A nightly job instead points the whole Docker integration suite at a pinned build of each Engine major below and reports what actually happens — so this list is a live result, not a guess.
- Engine 24.x
- Engine 25.x
- Engine 26.x
- Engine 27.x
- Engine 28.x
- Engine 29.x
Minimum Engine API 1.43 (Engine 24) · docker compose plugin v2 or newer — legacy docker-compose v1 is not supported · the client SDK negotiates down to whatever your daemon speaks, so a newer build talks to an older one without any configuration.
See tonight's run