Skip to Content
prxy.monster v1 is in early access. See what shipped →
Local ModeLocal mode — Docker reference

Docker reference

Pull the image

docker pull prxymonster/local:latest

Tags follow semver: latest, 1, 1.0, 1.0.3. For production pin to a minor (1.0).

Minimal run

docker run -d \ --name prxy \ -p 3099:3099 \ -v ~/.prxy:/data \ -e ANTHROPIC_API_KEY=sk-ant-xxx \ prxymonster/local:latest
FlagWhy
-dDetach (run in background).
--name prxyEasy docker logs prxy, docker stop prxy.
-p 3099:3099Bind to host port. Use -p 127.0.0.1:3099:3099 to keep it local-only.
-v ~/.prxy:/dataPersistent storage. Container is stateless without this.
-e ANTHROPIC_API_KEYAt least one provider key required.

All environment variables

Required

  • ANTHROPIC_API_KEY (or any other provider — at least one must be set)

Optional

VariableDefaultNotes
OPENAI_API_KEYWires the OpenAI provider.
GOOGLE_API_KEYWires Google (Gemini).
GROQ_API_KEYWires Groq.
VOYAGE_API_KEYEmbeddings for mcp-optimizer/semantic-cache. Falls back to offline stub if unset.
PRXY_PIPEmcp-optimizer,semantic-cache,patternsDefault pipeline.
PORT3099HTTP listen port.
LOG_LEVELinfodebug, info, warn, error.
LOCAL_MODEtrue (forced in this image)Don’t change.
DATA_DIR/dataWhere SQLite + blobs live. Map a volume here.

Persistent volume

-v ~/.prxy:/data

Anything in /data survives container restarts. Inside:

/data/ ├── prxy.db ← SQLite. Patterns, embeddings, cached responses. ├── prxy.db-wal ← SQLite write-ahead log. ├── prxy.db-shm ← SQLite shared-memory file. ├── blob/ ← Compressed conversation archives. └── config.yaml ← Optional pipeline config.

Backup: tar czf prxy-backup.tgz ~/.prxy. Restore: untar to the same location.

Healthcheck

docker run -d \ --health-cmd='curl -fsS http://localhost:3099/health || exit 1' \ --health-interval=30s \ --health-retries=3 \ --health-start-period=10s \ -p 3099:3099 \ -v ~/.prxy:/data \ -e ANTHROPIC_API_KEY=sk-ant-xxx \ prxymonster/local:latest

The /health endpoint returns 200 when the process is responsive.

Compose file

# docker-compose.yml services: prxy: image: prxymonster/local:latest container_name: prxy ports: - '127.0.0.1:3099:3099' volumes: - ./prxy-data:/data environment: ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} OPENAI_API_KEY: ${OPENAI_API_KEY:-} PRXY_PIPE: 'exact-cache,semantic-cache,patterns,ipc' LOG_LEVEL: info healthcheck: test: ['CMD-SHELL', 'curl -fsS http://localhost:3099/health || exit 1'] interval: 30s retries: 3 restart: unless-stopped

Logs

docker logs -f prxy

JSON-structured. Pipe to jq for pretty output:

docker logs -f prxy 2>&1 | jq -R 'fromjson? // .'

Updates

docker pull prxymonster/local:latest docker stop prxy docker rm prxy docker run -d --name prxy -p 3099:3099 -v ~/.prxy:/data \ -e ANTHROPIC_API_KEY=sk-ant-xxx prxymonster/local:latest

The volume persists across container replacements. Schema migrations run automatically on boot.

Resource sizing

The container is small — ~200 MB image, ~150 MB resident in steady state. CPU spikes briefly during embedding generation (when mcp-optimizer or semantic-cache need to embed a request).

WorkloadRecommended
Single developer, casual1 vCPU, 512 MB RAM
Single developer, MCP-heavy2 vCPU, 1 GB RAM
Small team, shared instance2 vCPU, 2 GB RAM
High-volume support botRun cloud mode instead

See also

Last updated on