Run SlimeVR Server and its Web GUI in Docker with a setup that works across Linux, macOS, and Windows, plus an optimized Linux hotplug mode for direct USB tracker usage.
- Auto-downloads
slimevr.jarandslimevr-gui-dist.tar.gzfrom official releases - Single
.envconfiguration for version and Web GUI port - Nginx-served Web GUI with automatic
?ip=redirect - Cross-platform default compose profile (Docker Desktop friendly)
- Linux override profile for stable USB/HID hotplug behavior
.
|- .env
|- docker-compose.yml
|- docker-compose.linux.yml
|- nginx/
| |- Dockerfile
| |- entrypoint.sh
| \- templates/
| \- default.conf.template
\- slimevr/
\- Dockerfile
- Docker Engine 24+ (or Docker Desktop)
- Docker Compose v2 (
docker compose)
Edit .env:
SLIMEVR_VERSION=19.0.0-rc.1
WEBGUI_PORT=8080docker compose up -dThis mode uses explicit port mappings and is the recommended default for Docker Desktop users.
docker compose -f docker-compose.yml -f docker-compose.linux.yml up -dThis mode enables host networking and mounts /dev + /run/udev for resilient USB/HID reattach behavior.
Open:
http://<HOST_IP>:<WEBGUI_PORT>/
The GUI auto-redirects to:
http://<HOST_IP>:<WEBGUI_PORT>/?ip=<HOST_IP>
| Service | Port(s) | Protocol |
|---|---|---|
| SlimeVR Trackers | 6969 | UDP |
| Web GUI | WEBGUI_PORT |
TCP |
| WebSocket Bridge | 21110 | TCP |
| OSC Router | 9000, 9002 | TCP/UDP |
| VRC OSC | 9000, 9001 | TCP/UDP |
| VMC | 39539, 39540 | TCP/UDP |
| Legacy Discovery | 4768 | UDP |
slimevr-config: persistent SlimeVR config (vrconfig.yml)slimevr-gui: GUI static assets shared between app and Nginx
ERR_TOO_MANY_REDIRECTS: ensure redirect is only applied when?ip=is missing.- Nginx error
server directive is not allowed here: do not replacenginx.confwith aserver {}block; useconf.d/default.conf. - Linux USB not detected: run with
docker-compose.linux.yml(hotplug mode). - macOS/Windows USB passthrough: Docker Desktop does not expose raw USB devices to Linux containers like native Linux does. For direct USB trackers, use Linux (native/VM/WSL2 with USB/IP).
- Port already in use (
6969or21110): stop conflicting processes or containers.
Check conflicts:
sudo ss -ltnup | grep -E '(:6969|:21110)'To update SlimeVR, set a new SLIMEVR_VERSION in .env and recreate:
docker compose up -d --buildFor Linux hotplug mode:
docker compose -f docker-compose.yml -f docker-compose.linux.yml up -d --build- SlimeVR
- Web GUI assets from the official SlimeVR releases
MIT
BTC: bc1qrd3mexqu43qn0597d248725kdp3tr28252q64p
Last updated: 2026-04-02