Docker
Run Dashcam in a container.
Docker Deployment
Run Dashcam in a Docker container with your Claude Code data and captures mounted as volumes. This isolates the daemon from your host system while still providing full access to session data.
Quick Start
docker run -d \
--name dashcam \
-v ~/.claude:/root/.claude:ro \
-v ~/.dashcam:/root/.dashcam \
-p 57580:57580 \
dashcam-dev/dashcamOpen http://localhost:57580 in your browser.
Volume mounts explained:
| Mount | Purpose | Mode |
|---|---|---|
~/.claude:/root/.claude | Claude Code config and JSONL session files | Read-only |
~/.dashcam:/root/.dashcam | Dashcam database, captures, and config | Read-write |
The ~/.claude mount is read-only because Dashcam only reads JSONL files and settings — it never writes to your Claude Code directory. The ~/.dashcam mount is read-write because the daemon writes to the SQLite database and captures directory.
Docker Compose
For a more maintainable setup, use Docker Compose:
services:
dashcam:
image: dashcam-dev/dashcam
container_name: dashcam
restart: unless-stopped
ports:
- "57580:57580"
volumes:
- ~/.claude:/root/.claude:ro
- dashcam-data:/root/.dashcam
environment:
- DASHCAM_PORT=57580
- DASHCAM_HOST=0.0.0.0
volumes:
dashcam-data:docker compose up -dUsing a named volume (dashcam-data) instead of a bind mount for ~/.dashcam lets Docker manage the data directory. This is cleaner on systems where you do not need direct host access to the SQLite database.
Environment Variables
Configure the daemon via environment variables instead of (or in addition to) the config file:
| Variable | Description | Default |
|---|---|---|
DASHCAM_PORT | HTTP and WebSocket port | 57580 |
DASHCAM_HOST | Bind address | 0.0.0.0 |
DASHCAM_DB | Database path | /root/.dashcam/dashcam.db |
DASHCAM_CAPTURES_DIR | Captures directory | /root/.dashcam/captures |
DASHCAM_LOKI | Enable Loki Mode bridge (true/false) | false |
DASHCAM_SQUAD | Enable Claude Squad bridge (true/false) | false |
docker run -d \
--name dashcam \
-e DASHCAM_PORT=8080 \
-e DASHCAM_LOKI=true \
-v ~/.claude:/root/.claude:ro \
-v ~/.dashcam:/root/.dashcam \
-p 8080:8080 \
dashcam-dev/dashcamConnecting Hooks from the Host
When running Dashcam in Docker, the daemon listens inside the container. If Claude Code runs on the host machine, its hooks need to reach the containerized daemon. Since port 57580 is forwarded to the host, the default hook commands (curl -sf -X POST http://localhost:57580/hook/...) work without modification.
If you change the port mapping (e.g., -p 8080:57580), update your Claude Code hooks to POST to the host-side port (http://localhost:8080/hook/...) by running dashcam init --port 8080.
Playwright for Screenshots
The Docker image includes a headless Chromium installation for Playwright-based screenshot capture. If your dev server runs on the host, Dashcam inside the container needs to reach it. Use Docker's host networking or explicit host address:
docker run -d \
--name dashcam \
--network host \
-v ~/.claude:/root/.claude:ro \
-v ~/.dashcam:/root/.dashcam \
dashcam-dev/dashcamWith --network host, the container shares the host's network stack. The daemon can reach localhost:3000 (your dev server) directly, and no port mapping is needed.
Alternatively, configure a custom capture URL pointing to the host:
{
"capture": {
"customUrl": "http://host.docker.internal:3000"
}
}