Run the Gateway with Docker Compose
This tutorial shows how to run the OpenShell gateway as a Docker Compose service on a Linux host or on a machine running Docker Desktop (Windows or macOS).
After completing this tutorial you have:
- An OpenShell gateway running as a Compose service.
- The
openshellCLI registered against that gateway. - An AI provider configured with your API key.
- A running OpenClaw sandbox.
Prerequisites
- Docker Desktop (Windows or macOS) or Docker Engine with the Compose plugin (Linux).
- The
openshellCLI installed on your workstation. See Install the CLI below. - Port 8080 available on the host.
Compose files
The Compose configuration lives at deploy/docker/ in the repository.
Port note
The Docker compute driver injects host.openshell.internal:<gateway-port> into every sandbox container as its callback address. The gateway listens on port 8080 inside the container, so port 8080 must be published at the same number on the Docker host. Publishing it as a different host port (for example 18080:8080) causes sandbox containers to call back to the wrong port and remain stuck in the Provisioning phase.
If port 8080 is taken, change OPENSHELL_SERVER_PORT and update the port mapping to <your-port>:8080, then set OPENSHELL_PORT=<your-port> in an .env file.
Data directory
The gateway extracts the openshell-sandbox supervisor binary from ghcr.io/nvidia/openshell/supervisor:latest on first start and caches it at:
This path is used as a bind-mount source when Docker creates sandbox containers. Docker resolves bind-mount sources against the host filesystem, not the container filesystem, so the data directory must be bind-mounted at the same absolute path in both the host and the container.
The Compose file uses /var/lib/openshell for this purpose and sets create_host_path: true so Docker creates it on first run.
Start the gateway
Verify the gateway is healthy:
Install the CLI
Binary (recommended — macOS / Linux / WSL):
From PyPI (any platform with uv):
On Windows without WSL, install the CLI inside a WSL 2 distribution (for example AlmaLinux or Ubuntu) and run all openshell commands from that distribution.
Register the gateway
Run this once after the gateway starts:
Verify the connection:
The output should show Status: Connected.
Configure an AI provider
Set your API key as an environment variable and create a provider:
Anthropic (Claude)
OpenAI
Confirm the provider was stored:
Pre-pull sandbox images (optional)
Sandbox images are pulled automatically on first use, but the initial pull can take several minutes for large images. Pre-pull to avoid long waits at sandbox creation time:
Create a sandbox
OpenClaw
Claude Code
OpenCode
OpenClaw launches directly. The first run pulls the image if it is not cached.
Wait for the phase to change from Provisioning to Ready:
Then connect:
Manage the gateway
Linux notes
On Linux, host.docker.internal and host.openshell.internal are not automatically resolvable from containers. Add the following under the gateway service in docker-compose.yml:
Next steps
- First Network Policy — apply L7 policies to your sandbox.
- GitHub Push Access — grant a sandbox scoped GitHub access.