cd docker
docker compose up -dOpen http://localhost:3000. Android devices connected via USB will be detected automatically.
Docker on macOS/Windows cannot access USB devices. Use network ADB instead:
- On the Android device: enable Wireless debugging (Settings > Developer options)
- Start the container:
cd docker
docker compose -f docker-compose.network.yml up -d- Connect to the device from inside the container:
docker compose -f docker-compose.network.yml exec app adb connect <device-ip>:5555- Open
http://localhost:3000
To deploy just the relay (for remote access tunneling):
cd docker
docker compose --profile relay up -d relayngrok creates a public tunnel to your local relay, so remote users can connect without a VPS.
Sign up at ngrok.com and copy your authtoken from the dashboard.
cd docker
cp .env.example .envEdit .env and set NGROK_AUTHTOKEN to your token.
docker compose -f docker-compose.ngrok.yml up -dOpen the ngrok inspector at http://localhost:4040, or:
curl -s http://localhost:4040/api/tunnels | jq '.tunnels[0].public_url'Share this URL with the remote user.
On the PC with the Android device connected:
RELAY_URL=<ngrok-url> RELAY_PASSWORD=optional npm run dev:serverThe server prints a session code. The remote user enters the ngrok URL and session code in the browser client to connect.
The Docker images used (node:20-alpine, ngrok/ngrok:latest) support linux/arm64. On a Raspberry Pi 4/5 running a 64-bit OS, everything works out of the box.
If you encounter architecture issues, add platform: linux/arm64 to the service definitions in the compose file.
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
App port |
CORS_ORIGIN |
* |
Allowed CORS origins |
ADB_PATH |
adb |
Path to adb binary |
RELAY_PORT |
8080 |
Relay host port |
MAX_SESSIONS |
50 |
Max concurrent relay sessions |
SESSION_TIMEOUT |
86400000 |
Session expiry in ms (24h) |
NGROK_AUTHTOKEN |
— | ngrok auth token (ngrok compose only) |