TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ohemilyy/universe/llms.txt
Use this file to discover all available pages before exploring further.
runtime-docker extension replaces Universe’s default process-based runtimes (screen, tmux) with Docker containers. Each instance runs in its own container named universe-<instanceId>. The container’s working directory is bind-mounted from ./running/<instanceId>/, so template files are available exactly as they are on the host.
Installation
Create the config file
On first load, the extension reads
./extensions/runtime-docker/config.json. Create the directory and drop in a config file before starting Universe.Configuration
The extension reads./extensions/runtime-docker/config.json. All fields are optional — the defaults work for a standard local Docker socket.
Field reference
| Field | Type | Default | Description |
|---|---|---|---|
factoryName | string | "docker-jvm" | Internal label for the Docker client factory. |
network | string | "host" | Docker network mode for all containers. |
javaImage.repository | string | "azul-zulu" | Image repository name. |
javaImage.tag | string | "25-jdk-alpine" | Image tag to run. |
javaImage.registry | string | null | null | Optional private registry prefix. |
javaImage.platform | string | null | null | Optional platform, e.g. "linux/amd64". |
volumes | array | [] | Structured volume mounts (see below). |
binds | array | [] | Raw bind strings in "host:container" or "host:container:ro" format. |
exposedPorts | array | [] | Extra ports to expose beyond the allocated instance port. |
dockerHost | string | "unix:///var/run/docker.sock" | Docker daemon socket or TCP address. |
dockerCertPath | string | null | null | Path to TLS certificates for TLS-secured daemons. |
registryUsername | string | null | null | Credential for private registry pulls. |
registryPassword | string | null | null | Credential for private registry pulls. |
registryEmail | string | null | null | Credential for private registry pulls. |
registryUrl | string | null | null | Private registry URL. |
user | string | null | null | Unix user to run the container process as. |
containerWorkDir | string | "/app" | Working directory inside the container where the instance dir is mounted. |
autoRemove | boolean | false | Automatically remove the container after it stops. Set to false for debugging. |
stopTimeout | int | 10 | Seconds to wait for graceful container shutdown before force-killing. |
hostDataPath | string | null | null | Required when Universe itself runs inside Docker. See note below. |
Volume mounts
Use thevolumes array for structured mounts:
binds for shorthand strings:
Running Universe inside Docker
When Universe runs inside a Docker container itself, bind mounts for instance working directories are resolved by the Docker daemon on the host filesystem, not inside the Universe container. SethostDataPath to the absolute host path that corresponds to Universe’s data directory.
Example: Universe container mounts
./data:/data and the compose file lives at /opt/universe. Set hostDataPath: "/opt/universe/data" so child containers bind-mount the correct host path.Using the Docker runtime
Set"runtime": "docker" in any instance configuration file under ./configuration/:
Container lifecycle
DockerRuntimeProvider implements the full RuntimeProvider interface:
| Method | Behaviour |
|---|---|
start(instanceId, workingDir, port, command, ramMB, cpu) | Pulls the image if not present locally, removes any stale container with the same name, creates and starts the container with the working directory bind-mounted, and verifies the container is still running after 1.5 s. |
stop(instanceId) | Sends a stop signal and waits up to stopTimeout seconds, then force-removes the container unless autoRemove is enabled. |
executeCommand(instanceId, command) | Runs the command string inside the running container via docker exec. |
isRunning(instanceId) | Inspects the container state and returns true if it is running. |
Resource limits
Pass non-zero values forramMB and cpu in the instance configuration to apply Docker resource limits:
ramMB— sets the container’s memory limit and disables swap.cpu— sets nano-CPU units (100 units = 1 core of CPU time).
Port bindings
The allocated instance port is always mappedhost:container at the same port number. Additional ports declared in exposedPorts are exposed but not bound to specific host ports.
Private registry
PopulateregistryUsername, registryPassword, registryEmail, and registryUrl in the config to authenticate against a private registry before pulling images.