A self-contained Docker build of the latest Sony nmos-cpp NMOS registry, bundled with the nmos-js browser UI.
This exists because the commonly-recommended
rhastie/build-nmos-cpp image is
pinned to an old nmos-cpp commit (Dec 2022) and to Conan 1.x, which upstream
nmos-cpp no longer supports. Current nmos-cpp requires Conan 2.20+ and
CMake 3.24+ with the new conan_provider.cmake integration — handled here.
| Component | Detail |
|---|---|
nmos-cpp-registry |
Built from sony/nmos-cpp (pinned commit, see Dockerfile), Conan 2 toolchain, Release build |
| nmos-js Web UI | Served by the registry itself at /admin/ on the registry port (8010); includes MXL support and the BCP-008 status monitor panels |
| IS-12 Device Model Browser | The nmos-js IS-12 client, served at /admin/is12-client/; launched from the Devices page via a Control Protocol (urn:x-nmos:control:ncp) URI |
| DNS-SD | Apple mDNSResponder built into the image (no host Avahi conflict) |
| MQTT broker | mosquitto for IS-07 event transport, on 1883, advertised via mDNS (_nmos-mqtt._tcp) |
| Base | ubuntu:24.04, multi-stage → slim runtime |
docker run -d --network host --restart unless-stopped \
--name nmos-cpp-registry gemini2350/nmos-cpp-registry:latestThen open http://<host>:8010/admin/.
git clone https://github.com/Gemini2350/nmos-cpp-registry.git
cd nmos-cpp-registry
docker build -t nmos-cpp-registry .
# or: make buildThe first build is slow (Conan compiles any dependencies without prebuilt binaries for your platform). Subsequent builds are cached.
To bump to a newer upstream commit without editing the Dockerfile:
docker build --build-arg NMOS_CPP_VERSION=<git-sha> -t nmos-cpp-registry .mDNS needs host networking so NMOS nodes on the LAN can discover the registry:
docker run -d --network host --name nmos-cpp-registry \
--restart unless-stopped nmos-cpp-registryor:
docker compose up -d # uses docker-compose.yml (host network)| Port | Purpose |
|---|---|
| 8010 | IS-04 Registration API + Query API (HTTP) and the nmos-js browser UI at /admin/ |
| 8011 | Query API WebSocket |
| 1883 | MQTT broker (mosquitto) for IS-07 |
| 5353/udp | mDNS / DNS-SD |
- Browser UI:
http://<host>:8010/admin/ - Point NMOS Crosspoint's registry setting at
http://<host>:8010.
The UI and the API share port 8010 (admin_port == http_port in registry.json).
To split them onto separate ports again, set admin_port to e.g. 3208.
Defaults live in registry.json. Override by mounting your own:
docker run -d --network host \
-v "$(pwd)/registry.json:/home/registry.json:ro" \
nmos-cpp-registryOr point at a different file inside the container with -e REGISTRY_JSON=/path.json.
Environment variables:
| Variable | Default | Effect |
|---|---|---|
REGISTRY_JSON |
/home/registry.json |
Path to the registry config inside the container |
UPDATE_LABEL |
FALSE |
If TRUE, stamp the registry label with the container hostname |
RUN_MQTT |
TRUE |
Start the bundled mosquitto MQTT broker (IS-07) |
MQTT_PORT |
1883 |
MQTT broker listen port |
ADVERTISE_MQTT |
TRUE |
Advertise the broker via mDNS (_nmos-mqtt._tcp) |
The default registry.json sets ptp_domain_number: 0, so the
IS-09 System API at /x-nmos/system/v1.0/global/ reports PTP domain 0
(nmos-cpp's own default is 127). Change it there if your PTP domain differs.
Full list of settings: https://github.com/sony/nmos-cpp/blob/master/Development/nmos/settings.h
An optional separate container with the NMOS Scripty Monitoring Dashboard (fork of cristian-recoseanu's dashboard, MIT) — a BCP-008/IS-04 traffic-light system view that harvests this registry's Query API and opens IS-12/NCP sessions to the devices.
docker run -d --network host --restart unless-stopped \
--name nmos-scripty-dashboard gemini2350/nmos-scripty-dashboard:latestThen open http://<host>:3000/. The bundled docker-compose.yml starts it
alongside the registry. Configure via NMOS_REGISTRY_HOST / NMOS_REGISTRY_PORT
(default 127.0.0.1:8010) and PORT (default 3000).
Built on sony/nmos-cpp and sony/nmos-js (both Apache-2.0). Inspired by rhastie/build-nmos-cpp.