Skip to content

fix(desktop): start an installed Docker Desktop instead of installing Podman beside it - #831

Open
dustywusty wants to merge 3 commits into
mainfrom
dustywusty/docker-desktop-not-podman
Open

dustywusty wants to merge 3 commits into
mainfrom
dustywusty/docker-desktop-not-podman

Conversation

@dustywusty

@dustywusty dustywusty commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

What

On macOS and Windows, OpenBot Desktop picks its container engine in this order:

  1. Docker answers: it is used as it is.
  2. Docker Desktop is installed but not running: it is opened and waited for, up to 5 minutes. A first start shows Docker's terms in Docker's own window, and the person accepts them there.
  3. Another docker is installed but stopped (OrbStack, Colima): it is left for its owner to start, with a message that says so.
  4. Podman is already installed: it is used.
  5. No Docker at all: Podman is installed, as before.

Linux: unchanged.

Why

With Docker Desktop installed but quit, setup found no engine that answered and installed Podman behind an administrator prompt. That left a second engine on a machine that already had Docker.

What it does not do

OpenBot does not install Docker Desktop. An earlier revision of this PR did; it was removed so that a machine with no Docker gets Podman, as it always has.

Test

  • install::tests cover:
    • an answering Docker;
    • a stopped Docker Desktop, with and without a Podman beside it, and one that fails to start;
    • a stopped OrbStack-style docker;
    • an existing Podman, with and without a docker command beside it;
    • no Docker (Podman installed);
    • Linux.
  • docker_desktop::tests cover starting a stopped Docker Desktop and the time limit.
  • The full desktop Rust suite passes on macOS (551 + 149). cargo fmt --check and cargo clippy --all-targets -D warnings are clean.

…hen it is not; never Podman in its place

With Docker Desktop installed but quit, setup found no answering engine and installed Podman behind
an administrator prompt: a second engine on a machine that already had Docker, and one local
Intelligence refuses. On macOS and Windows the engine is now Docker Desktop. Installed and stopped,
it is opened and waited for. Missing, Docker's own installer (4.96.3, pinned to the digests Docker
publishes) is downloaded with progress, installed without accepting Docker's terms, and opened so
the person accepts them in Docker's window. A Podman somebody already has is still used; a stopped
docker with no Docker Desktop (OrbStack, Colima) is left for its owner to start. Linux is unchanged.
The non-macOS branch mapped a spawned process to Default::default(), leaving the type to inference,
which had nothing to go on: error[E0282] on Linux and Windows. It is std::process::ExitStatus's
default, which reads as success; a started Docker Desktop is the whole job there.
@dustywusty

Copy link
Copy Markdown
Collaborator Author

Linux and Windows CI failed to compile this branch: root cause and fix

  • Error: error[E0282]: type annotations needed for Result<_, std::io::Error> at desktop/src-tauri/src/docker_desktop.rs:232, in jobs core, app (linux) and app (windows).
  • Where it entered: the original commit on this branch. The non-macOS launch path was command(&app).spawn().map(|_| Default::default()). Nothing pins the type of Default::default(), so inference fails.
  • Why it went undetected: that branch is #[cfg(not(target_os = "macos"))], and the branch was built and tested only on macOS, so the code was never compiled before CI ran it. A Windows cross-check from macOS isn't possible here because ring needs the Windows SDK.
  • Fix: .map(|_| std::process::ExitStatus::default()). The default status reads as success, which is right: starting Docker Desktop's executable is the whole job there.
  • Evidence: a standalone program with the old expression reproduces the same E0282; the fixed one compiles and runs. CI on this push is the proof for Linux and Windows.

The engine choice on macOS and Windows is now: a Docker that answers is used; an installed Docker
Desktop that is stopped is started; any other stopped `docker` (OrbStack, Colima) is left for its
owner; a machine with no Docker gets Podman, as it did before; an existing Podman is used.

OpenBot no longer installs Docker Desktop itself, so its pinned installers, the streamed download
and the 15-minute first-start wait are removed. Linux is unchanged.
@dustywusty dustywusty changed the title fix(desktop): start Docker Desktop when it is installed, install it when it is not; never Podman in its place fix(desktop): start an installed Docker Desktop instead of installing Podman beside it Oct 27, 2026
@dustywusty
dustywusty marked this pull request as ready for review October 27, 2026 22:16
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T22:18:06.079975Z 36f6969 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 36f69695af

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +445 to +447
let said = start_docker()?;
place_compose(&into)?;
return Ok(said);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Skip Podman machine setup after starting Docker Desktop

On macOS or Windows with Docker Desktop stopped and no Podman installed, this branch now starts Docker successfully and returns success without installing Podman, but engine_ready subsequently calls acquire::create_machine, acquire::start_machine, and the health gate for acquire::address() unconditionally. Those functions explicitly invoke Podman, so local installation fails at podman machine list even though Docker is now answering. Re-detect and return the ready Docker address after this operation, bypassing the Podman-only machine preparation.

Useful? React with 👍 / 👎.

Comment on lines +34 to +35
if let Some(home) = std::env::var_os("HOME") {
places.push(PathBuf::from(home).join("Applications/Docker.app"));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Resolve the Docker CLI for the user-local app location

On macOS with Docker Desktop installed in ~/Applications and its CLI absent from OpenBot's inherited PATH, this newly recognized location causes setup to open Docker Desktop, but startup can never be detected. answers() delegates to engine::program(Engine::Docker), whose fallback locations include only /Applications/Docker.app and the system CLI directories, not this user-local bundle. Consequently the app reports a startup timeout after five minutes even if Docker Desktop is running. Include the discovered bundle's CLI in engine resolution so detection and subsequent engine commands can use it.

Useful? React with 👍 / 👎.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant