π³ Docker Guide β OmniRoute
v3.8.1Last updated: 2026-05-13
Was this page helpful?
Loading OmniRoute...
Last updated: 2026-05-13
Was this page helpful?
README Docker section.
docker run -d \ --name omniroute \ --restart unless-stopped \ --stop-timeout 40 \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest
# Copy and edit .env first cp .env.example .env docker run -d \ --name omniroute \ --restart unless-stopped \ --stop-timeout 40 \ --env-file .env \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest
# Base profile (no CLI tools) docker compose --profile base up -d # CLI profile (Claude Code, Codex, OpenClaw built-in) docker compose --profile cli up -d # Host profile (Linux-first; mounts host CLI binaries read-only) docker compose --profile host up -d # Combine CLI + CLIProxyAPI sidecar docker compose --profile cli --profile cliproxyapi up -d
| (default) | |||
| and bundled CLIs (Codex, Claude Code, Droid, OpenClaw) | |||
-like access to host CLIs by mounting , |
|||
CLIProxyAPI sidecar on port for upstream CLI proxying |
.
service is always defined in (it has no profile gate) and starts alongside any other profile.
(defaults to ) |
|
β |
|
| (10s interval) |
by default).
- β host-side port mapping for the Redis container.
Disabling Redis is not recommended (rate limiter will degrade to in-memory fallback). If you must, either remove/comment the service block in or scale it to zero:
docker compose up -d --scale redis=0
.
(mapped to internal ) |
|
(built from target) |
|
(, dedicated |
|
| (named, persisted across rebuilds) | |
+ , with |
# Build & start the production stack docker compose -f docker-compose.prod.yml up -d --build # Stream logs docker compose -f docker-compose.prod.yml logs -f # Tear down (keep volumes) docker compose -f docker-compose.prod.yml down
). Three stages are exposed; pick the right for your use case.
) and runs |
||
| No provider CLIs bundled. | ||
, , |
docker build --target runner-base -t omniroute:base . docker build --target runner-cli -t omniroute:cli .
: , , , , .
ENVIRONMENT.md, the following variables matter most when running under Docker:
| Required in production β set to a strong random string. | ||
profile at for self-update workflows |
(current directory) | |
| ) baked into the image | (set in Dockerfile) | |
/ |
/ |
|
| sidecar |
services:
omniroute:
image: diegosouzapw/omniroute:latest
container_name: omniroute
restart: unless-stopped
volumes:
- omniroute-data:/app/data
environment:
- PORT=20128
- NEXT_PUBLIC_BASE_URL=https://your-domain.com
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
command: caddy reverse-proxy --from https://your-domain.com --to http://omniroute:20128
volumes:
omniroute-data:
Cloudflare Quick Tunnel on . The first enable downloads only when needed, starts a temporary tunnel to your current endpoint, and shows the generated URL directly below your normal public URL.
without changing active tunnel state.
. if you want a different transport. + native (Apple Silicon, AWS Graviton, Raspberry Pi). Docker selects the matching architecture automatically; pass if you need to force AMD64 emulation on ARM hosts.
should be allowed to finish so OmniRoute can checkpoint the latest changes back into . The bundled Compose files already set a 40s stop grace period. If you run the image directly, keep .
: Set to if backups are managed externally.
- Data Persistence: Always mount a volume to
to persist your database, keys, and configurations across container restarts.
- Port Configuration: Override
environment variable to change the default port.
reference