Prerequisites
- Docker installed and running (Docker Desktop on macOS/Windows, or Docker Engine on Linux)
- Agent Canvas installed locally (if connecting from another instance) — see Setup
Run the Official Image
Mount a persistence directory for settings, secrets, and conversation history, and a projects directory for workspace access.- macOS / Linux
- Windows (PowerShell)
http://localhost:8000/canvas. The backend base URL remains http://localhost:8000, and the agent can access any project under the mounted /projects path.
Environment Variables
Configuration is passed via-e flags on docker run:
You can also pass
--disable-telemetry to the Agent Canvas runtime. Use the environment variable for deployment configuration because older images ignore an unknown environment variable but reject an unknown runtime flag.
Let the Agent Use Docker
By default the agent cannot run containers:docker is installed in the image, but the
daemon cannot start inside an unprivileged container. If the agent tries, it fails with
error creating default "bridge" network: operation not permitted.
That matters for tasks where a container is part of the workflow — building a Dockerfile
and running it to confirm the change works, bringing up a docker compose stack to
reproduce a bug, or using a toolchain that is only published as an image. Without a
daemon the agent can edit those files but cannot verify them.
To enable it, start the container with --privileged:
There is no safer middle ground. The Docker daemon needs kernel capabilities that are
granted by the host when the container starts, so they cannot be acquired later — and
rootless Docker does not avoid this: the daemon starts, but containers it creates fail
to launch (
error mounting "proc" to rootfs: operation not permitted).OpenHands Enterprise solves this differently, running each sandbox under a hardened
runtime that provides kernel-level isolation so nested containers run unprivileged. See
Running Docker in the Agent Sandbox.Connect from the Frontend
Start the frontend separately and point it at the container:- Click the backend switcher → Manage Backends → Add Backend.
- Fill in:
- Name — e.g.
docker-backend - Host / Base URL —
http://localhost:8000 - API Key — the
LOCAL_BACKEND_API_KEYvalue (check container logs if auto-generated)
- Name — e.g.
- Save and select it as the active backend.
Related Guides
- Connect and Manage Backends
- Local Backend
- VM / Self-Hosted Installation
- Kubernetes (Helm)
- Running Docker in the Agent Sandbox — how Enterprise does this without
--privileged

