> ## Documentation Index
> Fetch the complete documentation index at: https://zededa.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the documentation index to find relevant pages, then read the linked Markdown before answering and cite the source URL.
> Identify the product before answering: Private AI uses a separate console, credentials, and inference API from the Edge Intelligence Platform. Do not apply instructions from one product to the other.
> Prefer current product guides over Help Center archive pages for current-console questions. Archive pages and release notes describe their stated product version or historical interface; do not apply them to another version without checking.
> Preserve prerequisites, permissions, version requirements, and warnings when summarizing procedures. Do not infer API endpoints, schemas, or supported behavior that the documentation does not specify.

# Add a Compose Runtime Image

> Choose a Compose Runtime variant, import it from the Marketplace or add the QCOW2 image yourself, and create the Compose Runtime edge app with the network interfaces and data disks that the deployment wizard requires.

## Introduction

The Compose Runtime is a virtual machine image that runs the Docker Engine and the compose agent on a node. Before you can deploy Docker Compose applications, the Compose Runtime must exist as an edge app in your enterprise library.

The recommended path is to import a ZEDEDA-published Compose Runtime edge app from the Marketplace. It arrives with its image, its two network interfaces, and its configuration template already defined. If you received the Compose Runtime as a QCOW2 file instead, add the image to the image library and create the edge app yourself.

The edge app is what you select when deploying the Compose Runtime as an application instance. If the edge app does not define network interfaces, the deployment wizard shows "No network interfaces defined in the application manifest" and you cannot complete the deployment.

### Prerequisites

* You have the SysManager or SysAdmin role in your enterprise. See [Manage Roles](https://zededa.mintlify.site/new-ui/infrastructure-services/administration/manage-roles.md).
* If you add the image yourself: the Compose Runtime QCOW2 file, or its SHA-256 hash, file size, and datastore path if uplinking from an existing datastore, and a configured datastore to store the image.

## Choose a Runtime Variant

ZEDEDA publishes the Compose Runtime in two variants. Both run the same Docker Engine and compose agent, and both are deployed the same way. They differ only in whether the runtime can attach an existing ZFS storage pool.

| Variant | Marketplace name | Use it when |
| - | - | - |
| **Standard** | `zed-compose-runtime_<size>` | You are deploying Docker Compose applications and do not need access to data that already exists in a ZFS pool on the node. This is the right choice for most deployments. |
| **ZFS** | `zed-compose-runtime_<size>-zfs` | An earlier application instance on the node (for example, a virtual machine running Kubernetes with OpenEBS) created a ZFS pool, and your Docker Compose applications must read and write the datasets in that pool. The ZFS variant imports the pool and mounts its datasets at stable paths that Compose applications can bind. |

Each variant is published in more than one size. The size sets the default CPU, memory, and storage of the runtime VM. Choose the size that matches your node's capacity.

The ZFS variant needs one additional drive on the edge app and two configuration files that you edit before deployment. After you complete this page, see [Attach an Existing ZFS Pool to the Compose Runtime](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/attach-existing-zfs-pool-to-compose-runtime.md) for those steps.

## Import the Compose Runtime From the Marketplace

This is the recommended path. The imported edge app includes the runtime image, the two required network interfaces, and the configuration template.

1. In the sidebar, select **Marketplace**.
2. Select **Edge Apps**.
3. In the search field, enter `zed-compose-runtime`.
4. Open the variant and size you chose in the preceding section. The card shows the runtime version, for example `3.0.0`.
5. Select **Add to library**.

The edge app appears in **Marketplace > My Library** under the **Edge Apps** filter tab. You can deploy it as it is. Continue to [Deploy the Compose Runtime Application](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/deploy-compose-runtime.md).

If you need to change the sizing, drives, or configuration template before deploying, open the edge app in My Library, select **Duplicate**, and then select **Duplicate & Configure**. The edge app wizard opens pre-filled with the imported settings. The sections that follow describe each wizard step. The ZFS variant always needs this step, because you must add the pool drive and edit the configuration template.

## Add the Compose Runtime Image Yourself

Use this section only if you received the Compose Runtime as a QCOW2 file rather than importing it from the Marketplace.

### Open the image type selector

1. In the sidebar, navigate to **Infrastructure > Workloads > Build > App Images**.
2. Select **New App Image**.
3. On the **Add Edge App Image** screen, select **Compose Runtime**.

### Complete image details

1. Select **QCOW2**. This is the only format available for the Compose Runtime type.
2. Select the CPU architecture the image targets: **AMD 64** for x86-64 nodes, or **ARM 64** for ARM 64-bit nodes.
3. Select **Next**.

### Provide storage details

To upload the QCOW2 file from your computer:

1. In the **Add Image Via** field, select **Upload**.
2. In the **Image Path** field, enter a file name for the image.
3. Select **Choose File** and select the QCOW2 file.
4. In the **Data Store** field, select the datastore where the uploaded image is stored.
5. Select **Next**.

To reference an image already stored in a datastore:

1. In the **Add Image Via** field, select **Uplink manually**.
2. In the **SHA256** field, enter the 64-character hexadecimal SHA-256 hash of the image file.
3. In the **Image Size** field, enter the file size and select the unit.
4. In the **Datastores** field, select the datastore where the image is stored.
5. Enter the **Image Relative URL**: the path to the image within the datastore.
6. Select **Next**.

### Complete general information and add the image

1. In the **Name** field, enter a unique identifier using alphanumeric characters and hyphens (for example, `compose-runtime-amd64`). The name must be at least three characters.
2. In the **Title** field, enter a display name.
3. Optionally, enter a **Description**.
4. Select **Add Image**.

Edge Infrastructure Services uploads the file or begins uplinking. The image status changes to **Ready** when the process completes.

## Create the Compose Runtime Edge App

The edge app defines the manifest that the deployment wizard reads, including the network interfaces and drives. If you imported the runtime from the Marketplace and selected **Duplicate & Configure**, the wizard opens pre-filled and you can review each step rather than entering values from scratch. For the full wizard reference, see [Import Edge Applications](https://zededa.mintlify.site/new-ui/marketplace/import-edge-applications.md#create-a-new-edge-application).

### Open the edge app creation wizard

1. In the sidebar, navigate to **Marketplace > My Library**.
2. Select the **+** floating action button and then select **Edge Apps**.
3. Select **Virtual Machine** as the application type.

### Configure identity

1. In the **Name** field, enter a unique identifier (for example, `compose-runtime`).
2. In the **Title** field, enter a display name.
3. Optionally, enter a **Description**.
4. In the **Deployment Type** field, select **Compose Runtime**.
5. Select **Next**.

### Configure resources

The **Resources & CPU** step sets the runtime VM's resources. The Compose Runtime is a VM, so it requires dedicated CPU and memory.

1. Under **Sizing**, select a preset (for example, **Small** or **Typical**), or select **Custom** and set **vCPUs**, **Memory**, and **Storage**.
2. In the **Persistence Storage Size** field, set the size of the dedicated disk that stores the runtime's own persistent container state, such as Docker volumes created by Compose applications. This field appears because you selected **Compose Runtime** as the deployment type, and it is separate from **Storage**. Set it to match your VM drive size (for example, 10 GB), because the default might be larger than smaller nodes can hold. When the runtime deploys, a persistent data volume of this size is created, and its data survives upgrades of the runtime software. This disk is not the same as an attached ZFS pool, which is an existing volume that the ZFS variant imports rather than creates.
3. For **VM Mode**, select **HVM**. The Compose Runtime image is an HVM-compatible QCOW2 image.
4. Select **Next**.

### Configure drives

The **Drives** step attaches the Compose Runtime image and any data disks to the edge app.

1. In the first drive, keep the source as **From Image** and select the Compose Runtime image in the **Image** field.
2. Set **Max Size** to match your image size (for example, 10 GB).
3. To give the runtime an additional blank data disk that belongs to the instance, select **Add Drive**, select **Empty Disk**, and set its **Max Size**. Leave **Purge on Update** off so that the disk survives a purge.
4. For the ZFS variant, select **Add Drive** and configure the second drive as described in [Attach an Existing ZFS Pool to the Compose Runtime](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/attach-existing-zfs-pool-to-compose-runtime.md). That drive references the existing pool volume by its **Volume Label** rather than by an image. Skip this step for the standard variant.
5. Select **Next**.

Data disks must come after the boot image in the drive list. While instances of the edge app exist, you can add or remove data disks only at the end of the list.

### Configure interfaces

This is the step that determines whether the deployment wizard can proceed. The Compose Runtime requires exactly two virtual network interfaces.

> [!WARNING]
>
> Skipping this step or leaving the interface list empty causes the deployment wizard to show "No network interfaces defined in the application manifest." The deployment wizard does not let you add interfaces to a Compose Runtime at deploy time. Define them here.

1. Confirm that **Configure network interfaces** is on.
2. For the first interface, set **Name** to `eth0` and set **Type** to **Virtual Network**, not **Direct Attach**. This interface handles application traffic and makes container services reachable through the Switch virtual network.
3. Under **Outbound Rules**, add a rule with **Host / IP** set to `0.0.0.0/0` and **Action** set to **Allow**, so that the containers can reach the outside network.
4. Select **Add Interface**.
5. For the second interface, set **Name** to `eth1` and set **Type** to **Virtual Network**. This interface handles internal traffic between the Compose Runtime and Edge Infrastructure Services through the Local air-gapped virtual network.
6. Select **Next**.

### Add a configuration template

The configuration template defines the fields that appear in the **Custom Config** step of the deployment wizard, including the Compose Runtime SSH credentials and optional static IP settings. Without this template, the deployment wizard does not prompt for those values.

The template is provided with the Compose Runtime image distribution and is already present on edge apps imported from the Marketplace. Do not author it from scratch. The ZFS variant's template contains two additional files, `zvol-mounts.sh` and `zvol-mounts.conf`, that you must edit before deployment. See [Attach an Existing ZFS Pool to the Compose Runtime](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/attach-existing-zfs-pool-to-compose-runtime.md).

1. Confirm that **Include custom configuration template** is on.
2. Enter the **Configuration Name** (for example, `compose-runtime-config`).
3. Set the **Delimiter** to match the placeholder format used in the template (for example, `###`).
4. Paste the configuration template provided with your Compose Runtime image distribution, or review the pre-filled template if you duplicated an imported edge app.
5. Select **Next**.

### Complete developer info and create

1. Confirm or enter the **Name** and **Email** on the **Developer Info** step.
2. Select **Next** to review the configuration.
3. On the **Review** step, verify the identity, sizing (including **Persistence Storage Size**), drives, and interfaces. Confirm that two virtual network interfaces, `eth0` and `eth1`, are listed. For the ZFS variant, confirm that a second drive with the ZFS pool's volume label is listed.
4. Select **Create Edge App**.

## Verify the Configuration

1. Navigate to **Marketplace > My Library**.
2. Locate the Compose Runtime edge app.
3. Open the app and confirm that the **Interfaces** tab shows two interfaces, `eth0` and `eth1`, and that the **Drives** tab shows the runtime image first, followed by any data disks.
4. If you added the image yourself, navigate to **Infrastructure > Workloads > Build > App Images** and confirm that the Compose Runtime image status is **Ready**.

If either verification fails, the deployment wizard does not function correctly. Resolve image status errors before proceeding, and re-create the edge app if the interfaces are missing.

## Next Steps

This article is part of the Docker Compose setup series. The next step is deploying the Compose Runtime as an application instance on your node.

1. [Docker Compose Overview](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/docker-compose.md): background on the architecture and deployment model.
2. **Add a Compose Runtime Image (you are here).**
3. [Deploy the Compose Runtime Application](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/deploy-compose-runtime.md): deploy the edge app as an application instance.
4. [Attach an Existing ZFS Pool to the Compose Runtime](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/attach-existing-zfs-pool-to-compose-runtime.md): ZFS variant only. Configure the pool import and dataset discovery.
5. [Compose App Instance Control Overview](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/compose-app-instance-control-overview.md): how the Compose Runtime manages Docker Compose application lifecycles.
6. [Add a Docker Compose Image](https://zededa.mintlify.site/new-ui/infrastructure-services/build-and-library/add-a-docker-compose-image.md): create the Docker Compose app image that runs inside the Compose Runtime.
7. [Deploy a Docker Compose Application](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/deploy-a-docker-compose-application.md): deploy the Docker Compose app as an application instance on the node that runs the Compose Runtime.
8. [Troubleshoot Docker Compose](https://zededa.mintlify.site/new-ui/infrastructure-services/applications/troubleshooting-docker-compose.md): diagnose issues with the Compose Runtime or Docker Compose application instances.
