docker build -t ionclaw .The Dockerfile uses a multi-stage build:
- web-builder — compiles the Vue.js web client using Node.js 22
- builder — compiles the C++ binary using CMake on Ubuntu 24.04
- runtime — copies the binary into a minimal Ubuntu image with only OpenSSL runtime libraries
docker run -p 8080:8080 -v ionclaw-data:/data ionclawThe container:
- Initializes a project in
/dataon first run (if not already initialized) - Starts the server on the port defined by
PORT(default8080) - Stores all project data in
/data— mount a volume for persistence
docker compose upThe docker-compose.yml at the project root builds the image, maps port 8080, and mounts a named volume for data persistence.
services:
ionclaw:
build: .
ports:
- "8080:8080"
volumes:
- ionclaw-data:/data
environment:
- PORT=8080
restart: unless-stopped
volumes:
ionclaw-data:Pass environment variables to configure the server and inject secrets:
docker run -p 8080:8080 \
-e PORT=8080 \
-e ANTHROPIC_API_KEY=sk-... \
-e AUTH_SECRET_KEY=my-secret \
-v ionclaw-data:/data \
ionclawOr add them to docker-compose.yml:
environment:
- PORT=8080
- ANTHROPIC_API_KEY=sk-...
- AUTH_SECRET_KEY=my-secretReference them in config.yml as ${ANTHROPIC_API_KEY}.