Docker reference
Pull the image
docker pull prxymonster/local:latestTags 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| Flag | Why |
|---|---|
-d | Detach (run in background). |
--name prxy | Easy docker logs prxy, docker stop prxy. |
-p 3099:3099 | Bind to host port. Use -p 127.0.0.1:3099:3099 to keep it local-only. |
-v ~/.prxy:/data | Persistent storage. Container is stateless without this. |
-e ANTHROPIC_API_KEY | At least one provider key required. |
All environment variables
Required
ANTHROPIC_API_KEY(or any other provider — at least one must be set)
Optional
| Variable | Default | Notes |
|---|---|---|
OPENAI_API_KEY | — | Wires the OpenAI provider. |
GOOGLE_API_KEY | — | Wires Google (Gemini). |
GROQ_API_KEY | — | Wires Groq. |
VOYAGE_API_KEY | — | Embeddings for mcp-optimizer/semantic-cache. Falls back to offline stub if unset. |
PRXY_PIPE | mcp-optimizer,semantic-cache,patterns | Default pipeline. |
PORT | 3099 | HTTP listen port. |
LOG_LEVEL | info | debug, info, warn, error. |
LOCAL_MODE | true (forced in this image) | Don’t change. |
DATA_DIR | /data | Where SQLite + blobs live. Map a volume here. |
Persistent volume
-v ~/.prxy:/dataAnything 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:latestThe /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-stoppedLogs
docker logs -f prxyJSON-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:latestThe 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).
| Workload | Recommended |
|---|---|
| Single developer, casual | 1 vCPU, 512 MB RAM |
| Single developer, MCP-heavy | 2 vCPU, 1 GB RAM |
| Small team, shared instance | 2 vCPU, 2 GB RAM |
| High-volume support bot | Run cloud mode instead |
See also
Last updated on