Docker
Run Miravo in Docker with the published images, port mappings, writable state, and health probes.
Images
| Registry | Image |
|---|---|
| Docker Hub | amineamaach/miravo:latest |
| GitHub Container Registry | ghcr.io/amine-amaach/miravo:latest |
Pin a release tag when the deployment needs a fixed version.
Run in a container
# Start with MQTT and the admin API
docker run --rm -p 1883:1883 -p 8080:8080 amineamaach/miravo:latest# Start with OPC UA and a specific template
docker run --rm -p 1883:1883 -p 4840:4840 -p 8080:8080 \
-e MIRAVO_TEMPLATE=water-treatment \
-e MIRAVO_NAME=plant-a \
amineamaach/miravo:latest start --opcuaPort binding
Host ports must stay free. Change the left side of -p or ports: when
1883, 4840, 502, or 8080 already belongs to another process.
Docker Compose
services:
miravo:
image: amineamaach/miravo:latest
init: true
command: ["--log-format", "json", "start"]
environment:
MIRAVO_ADMIN_PORT: 8080
MIRAVO_HOME: /data/miravo
ports:
- "1883:1883"
- "8080:8080"
volumes:
- ./miravo-data:/data/miravo
read_only: true
tmpfs:
- /tmp:size=256m
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
stop_grace_period: 30s
healthcheck:
test:
[
"CMD-SHELL",
"wget -qO- http://127.0.0.1:8080/healthz > /dev/null || exit 1",
]
interval: 30s
timeout: 5s
retries: 3
start_period: 20s
restart: "on-failure:5"Ports
| Port | Surface | Purpose |
|---|---|---|
1883 | MQTT | Embedded broker when MQTT stays enabled |
4840 | OPC UA | OPC UA server when --opcua is enabled |
502 | Modbus TCP | Modbus server when --modbus is enabled |
8080 | HTTP | Admin API, embedded Console, /healthz, /readyz |
Volumes and state
| Host concern | Container setting |
|---|---|
| Persist runtime state and local registry | Mount a writable directory and set MIRAVO_HOME to that mount |
| Override runtime defaults | Set MIRAVO_* and LITMUS_EDGE_* variables in environment: or -e |
| Run custom templates or models | Mount the catalog and point --template, --models-dir, or MIRAVO_CATALOG_DIR at the mounted path |
volumes:
- ./miravo-data:/data/miravo
- ./catalog:/catalog:ro
environment:
MIRAVO_HOME: /data/miravo
MIRAVO_CATALOG_DIR: /catalog
MIRAVO_TEMPLATE: smart-factoryHealth probes
| Endpoint | Purpose | Healthy when |
|---|---|---|
GET /healthz | Liveness | Engine is running and the tick loop is advancing |
GET /readyz | Readiness | Engine is running and each enabled adapter reports ready |
livenessProbe:
httpGet:
path: /healthz
port: 8080
readinessProbe:
httpGet:
path: /readyz
port: 8080Reference
| Item | Value |
|---|---|
| Default command | start |
| Writable state path | MIRAVO_HOME inside the container |
| Default admin bind | 0.0.0.0:8080 |
| Read-only root support | Yes, when /tmp and MIRAVO_HOME stay writable |
| Privileged Linux port | 502 for Modbus TCP |
docker run --rm \
-e MIRAVO_ADMIN_PORT=9090 \
-e MIRAVO_MQTT_PORT=1884 \
-e MIRAVO_NAME=demo \
-p 1884:1884 -p 9090:9090 \
amineamaach/miravo:latestNext
CLI ⭢ miravo start
Runtime flags and command behavior.
Environment variables
Full MIRAVO_* and LITMUS_EDGE_* defaults.
Logging
Plain output and JSON output for container logs.
Admin API
Probe and control surfaces behind the container port.
Was this page useful?
Last updated on
Miravo