From f8a813903108fa1108063d6d5b98516c1d118aba Mon Sep 17 00:00:00 2001 From: LukeGus Date: Sun, 20 Sep 2026 18:53:37 -0500 Subject: [PATCH] feat: Support OrbStack Docker socket path on macOS / Fix "Docker is not installed" on mac... (#1302) https://github.com/Termix-SSH/Support/issues/1302 --- src/backend/hosts/docker/container-runtime.ts | 10 +++++++++- src/backend/hosts/metrics/managers/platform.ts | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/backend/hosts/docker/container-runtime.ts b/src/backend/hosts/docker/container-runtime.ts index 9883ec77e..00c740d5e 100644 --- a/src/backend/hosts/docker/container-runtime.ts +++ b/src/backend/hosts/docker/container-runtime.ts @@ -31,11 +31,19 @@ export function getContainerRuntimeConfig(raw: unknown): { }; } +/** + * Non-interactive SSH shells don't source ~/.zprofile or ~/.bash_profile, + * so PATH additions from installers like Homebrew or OrbStack are missing. + * Extend PATH with their common install locations before invoking the CLI. + */ +const EXTRA_PATH_DIRS = + '/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:"$HOME/.orbstack/bin"'; + export function containerCommand( runtime: ContainerRuntime | undefined, args: string, ): string { - return `${normalizeContainerRuntime(runtime)} ${args}`; + return `PATH="${EXTRA_PATH_DIRS}:$PATH" ${normalizeContainerRuntime(runtime)} ${args}`; } export function getRuntimeLabel(runtime: ContainerRuntime): string { diff --git a/src/backend/hosts/metrics/managers/platform.ts b/src/backend/hosts/metrics/managers/platform.ts index e19716f83..5d51c8419 100644 --- a/src/backend/hosts/metrics/managers/platform.ts +++ b/src/backend/hosts/metrics/managers/platform.ts @@ -12,11 +12,25 @@ export interface PlatformInfo { osPrettyName: string | null; } +/** + * Non-interactive SSH shells don't source ~/.zprofile or ~/.bash_profile, + * so PATH additions from installers like Homebrew or OrbStack are missing. + * Extend PATH with their common install locations before probing. + */ +export const EXTRA_PATH_DIRS = + '/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:"$HOME/.orbstack/bin"'; + +const DOCKER_PROBE = + `command -v docker >/dev/null 2>&1` + + ` || [ -S /var/run/docker.sock ]` + + ` || [ -S "$HOME/.orbstack/run/docker.sock" ]`; + /** * Single probe that reports which tooling is available. Each line is * "key=value" so the parser is trivial and order-independent. */ export const PLATFORM_PROBE_COMMAND = [ + `PATH="${EXTRA_PATH_DIRS}:$PATH"`, "echo systemd=$(command -v systemctl >/dev/null 2>&1 && echo 1 || echo 0)", "echo apt=$(command -v apt-get >/dev/null 2>&1 && echo 1 || echo 0)", "echo dnf=$(command -v dnf >/dev/null 2>&1 && echo 1 || echo 0)", @@ -24,7 +38,7 @@ export const PLATFORM_PROBE_COMMAND = [ "echo pacman=$(command -v pacman >/dev/null 2>&1 && echo 1 || echo 0)", "echo certbot=$(command -v certbot >/dev/null 2>&1 && echo 1 || echo 0)", 'echo acmesh=$( { command -v acme.sh >/dev/null 2>&1 || [ -x "$HOME/.acme.sh/acme.sh" ]; } && echo 1 || echo 0)', - "echo docker=$(command -v docker >/dev/null 2>&1 && echo 1 || echo 0)", + `echo docker=$(${DOCKER_PROBE} && echo 1 || echo 0)`, 'echo os=$(. /etc/os-release 2>/dev/null && echo "$PRETTY_NAME")', ].join("; ");