Bring the familiar Docker Compose workflow to Incus. incus-compose implements the Compose specification for the Incus ecosystem, allowing you to define and run multi-container applications using the compose.yaml files you already know.
services:
db:
image: docker.io/postgres:18-alpine
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
deploy:
resources:
limits:
cpus: "2"
memory: 2G
web:
image: docker.io/nginx:alpine
depends_on:
db: { condition: service_healthy }
ports:
- "8080:80"
deploy:
resources:
limits:
cpus: "1"
memory: 512M
incus-compose up
A plain compose file, running unchanged.
docker-compose.yml files with Incus containersflowchart LR
subgraph F["your files"]
direction TB
CY[compose.yaml]
CI["compose.incus.yaml<br/>optional Incus overrides"]
DE[.env]
end
F --> IC[incus-compose]
IC --> P
subgraph P["one Incus project per compose project"]
direction TB
IMG["images<br/>copied from the shared cache"]
NET["bridge networks<br/>real IPs and DNS"]
VOL["storage volumes<br/>UID/GID shifted"]
INST["instances<br/>web-1, db-1, ..."]
HD["ic-healthd<br/>healthchecks and restarts"]
end
New to Incus? See Why Incus? for what the platform brings over a classic OCI engine setup.
Recorded during the beta - the workflow is unchanged in current releases:
Status: Stable.
The workflow you know:
up, down, start, stop, kill, restart, pause/unpause, list (and ps), logs, exec, cp, top, events, config, plus build, healthd, incus (pass-through), and self-update.env interpolation, profiles, depends_on, secrets, and configscompose.incus.yaml override file - keep the upstream compose file untouched and put Incus tuning next to it docINCUS_COMPOSE_* environment variables for every flag, with a configurable parallel worker count docImages:
down/up, avoids registry rate limits)Networking:
Storage:
Operations:
depends_on: service_healthy ordering via the ic-healthd sidecar docup --scale and orphan pruningshm_size, container_name, etc.)Beyond any OCI engine:
x-incus-compose.devices docx-incus docRequires Incus 7.0.1 (LTS) or 7.2+, podman or docker for image building and an Incus https remote (needed for healthchecking) with OCI registries added.
See Getting Started for the full setup walkthrough.
Install the latest release:
curl -sSfL https://raw.githubusercontent.com/lxc/incus-compose/main/install.sh | sh -s -- -b ~/.local/bin
Or grab a prebuilt archive from the Releases Page.
On Arch Linux, install incus-compose-bin
(or incus-compose-git for builds from main)
from the AUR.
Then point it at your existing compose.yaml:
# Start services
incus-compose up -d
# View logs
incus-compose logs -f
# List running services
incus-compose list
# Stop and remove
incus-compose down
The following channels are available for questions and discussion around incus-compose.
You can file bug reports and feature requests at: https://github.com/lxc/incus-compose/issues/new
Community support is handled at: https://discuss.linuxcontainers.org
Fixes and new features are greatly appreciated. Make sure to read our contributing guidelines first!