Docker
Deploy the edge client as a Docker container
Open Mesh Storage → Device Setup → and select Docker to run the interactive flow with pre-filled tokens and compose files.
The client needs outbound access on port 443 (HTTPS) only. No inbound ports required.
Step 1: Pull the container image
In the Device Setup modal, select Docker, then pick your ROS distro (Jazzy/Humble), architecture (x86_64/ARM64), and optional variant. Click Generate Access Command to get a short-lived token (1 hour) for the private registry.
Authenticate with the registry:
echo "<TOKEN>" | docker login \
-u oauth2accesstoken \
--password-stdin \
australia-southeast1-docker.pkg.devThen pull the image:
docker pull australia-southeast1-docker.pkg.dev/alloy-version-0/alloy-edge/alloy-edge:<TAG>Step 2: Configure and download the compose file
In the Download Compose File section of the Device Setup modal, pick your middleware and download:
- Leave Middleware on the default, FastDDS.
- If alloy-edge will share topics with other ROS 2 containers on the same host, enter their UID in Run as UID (e.g.
1000:1000). Otherwise leave it blank. - Click Download docker-compose.yml.
Required for Isaac Sim. Highest throughput via shared memory.
UID must match. FastDDS uses /dev/shm internally — if alloy-edge runs as a different UID than your other ROS 2 containers, topics discover but data silently never flows. When in doubt, run echo "$(id -u):$(id -g)" as the user that owns those containers and paste the result into Run as UID.
- Set Middleware to CycloneDDS.
- Click Download docker-compose.yml.
No UID matching needed. Works without ipc: host — good for rootless Docker and Kubernetes.
- Set Middleware to Zenoh.
- Click Download docker-compose.yml.
The downloaded file includes a zenoh-router sidecar service automatically. Best for edge / WAN / multi-robot fleets.
Step 3: Run
docker compose up -dYour device will appear in Mesh Storage under the devices/ folder as Pending.
Step 4: Approve the device
- Open the
devices/folder in Mesh Storage - Find the new device and click Approve
- Alloy issues the device a permanent API key
- The client picks up the new key on its next sync — no manual key distribution needed
What happens next
After approval, the edge client picks up its configuration and starts recording. Within a minute or two you should see:
- Last seen updating as the client syncs
- Files appearing in the device's folder in Mesh Storage
You can then replay, inspect, or query any uploaded MCAP file directly from Mesh Storage.
ROS domain ID
ROS_DOMAIN_ID (default 0) isolates ROS 2 traffic on the same network. Set it when running multiple robots on the same LAN, or co-locating dev and prod stacks on one host:
ROS_DOMAIN_ID=42 docker compose up -dAll containers that need to communicate must share the same domain ID and the same middleware.
Managing the container
docker compose logs -f # view logs
docker compose down # stop
docker compose restart # restartFolder structure (mounted volumes):
data/
├── config/ # client config, provisioning key
└── data/ # recorded bags, uploaded files