Docker Architecture
Three containers run on the same isolated bridge network (openclaw_9router_net):
┌─────────────────────────────────────────────┐
│ openclaw_9router_net │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ openclaw │ │ 9router │ │
│ │ :18789 │ │ :20128 │ │
│ └────┬─────┘ └──────────┘ │
│ │ curl http://opentrader-bot:8000 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ opentrader-bot │ (internal port) │
│ │ FastAPI :8000 │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────┘
OpenClaw agents call the bot via HTTP rather than invoking python3 directly — completely separating the Python runtime from the Node.js container.