Introduction
Docker Engine … Client-server application
Docker CLI <--[ Unix domain socket ]--> Docker daemon (docker) (Docker REST API) (dockerd)
Docker Desktop / OrbStack … Superset of Docker Engine
| Linux VM | Docker CLI <--| |---------------| |--[ Unix domain socket ]-->| Docker daemon | Docker Desktop <--| |---------------| or OrbStack GUI
Motivation
If you have installed multiple Docker platforms (Docker Desktop, OrbStack) on your macOS, you most likely want to switch between them.
Switch the Docker CLI
Scenario
You are using the console to interact with docker. To switch the Docker CLI, you have to switch the symlink.
Bash script
#!/bin/bash DOCKER_SYMLINK="/usr/local/bin/docker" ORBSTACK="/Applications/OrbStack.app/Contents/MacOS/xbin/docker" DOCKER_DESKTOP="/Applications/Docker.app/Contents/Resources/bin/docker" function usage() { echo "Usage: $0 [orbstack|desktop|status]" exit 1 } function switch_to_orbstack() { sudo ln -sf "$ORBSTACK" "$DOCKER_SYMLINK" echo "Switched Docker CLI to OrbStack." } function switch_to_desktop() { sudo ln -sf "$DOCKER_DESKTOP" "$DOCKER_SYMLINK" echo "Switched Docker CLI to Docker Desktop." } function show_status() { TARGET=$(readlink "$DOCKER_SYMLINK") echo "Current symlink: $DOCKER_SYMLINK -> $TARGET" if [[ "$TARGET" == "$ORBSTACK" ]]; then echo "Currently using: OrbStack." elif [[ "$TARGET" == "$DOCKER_DESKTOP" ]]; then echo "Currently using: Docker Desktop." else echo "Currently using: Unknown target." fi } case "$1" in orbstack) switch_to_orbstack ;; desktop) switch_to_desktop ;; status) show_status ;; *) usage ;; esac
Switch the Unix domain socket
Scenario
You are using a Docker toolchain with an IDE like CLion (JetBrains). To switch the used Unix domain socket, you have to change the toolchain settings.
Sockets
Docker Desktop: /Users/{user}/.docker/run/docker.sock OrbStack: /Users/{user}/.orbstack/run/docker.sock
For CLion
- "Settings" --> "Build, Execution, Deployment" --> "Toolchains"
- Change "Docker for mac" in "Server" settings