Which command leaves you where:
stateDiagram-v2
state "not created" as absent
[*] --> absent
absent --> running: up
absent --> stopped: up --no-start
stopped --> running: start
running --> stopped: stop
running --> stopped: kill
running --> running: restart
running --> paused: pause
paused --> running: unpause
running --> absent: down
stopped --> absent: down
down removes the instances and the per-project image copies but keeps volumes
and the shared image cache. down --volumes also deletes the volumes;
down --project removes the whole Incus project.
Every option below (and every command-specific one on the pages that follow) can also be set via an environment variable - see Environment Variables for the full list.
| Option | Description |
|---|---|
-f, --file |
Compose files (repeatable) |
-p, --project-name |
Project name |
-P, --project-directory |
Working directory |
--profile |
Compose profiles (repeatable) |
--env-file |
Environment files (repeatable) |
-E, --os-env |
Include OS env vars |
--remote |
Incus remote |
--ansi |
Color output: never/always/auto |
--image-cache |
Incus project used as image cache (default: incus-compose-cache); set "" to disable caching and pull straight into the project |
--storage-pool |
Default storage pool for volumes (default: detect for auto-detection) |
--workers |
Number of concurrent workers (default: 4) |
--debug |
Debug logging |
Supports the no-color.org convention.
Set --image-cache "" to skip the cache project and pull images straight into
each project instead. This trades the shared cache (and its rate-limit/re-pull
savings) for one fewer copy per image - useful if you don't want a persistent
cache project on the server at all.
up and down follow depends_on by default: naming a service pulls in the
services it links to (its dependencies on up, its dependents on down). Use
--no-deps to act on exactly the named services. On up, --no-deps also
skips waiting on depends_on: { condition: service_healthy } for the
out-of-scope dependencies, so the named service starts without them.
start, stop, restart, logs, and ps act on exactly the named services
by default, matching docker compose start/stop. The --with-deps flag is an
incus-compose extension that opts those commands into following depends_on the
same way up/down do.
incus-compose --help splits its commands into two categories, and these pages
follow that split.
compose - the docker compose verbs:
| Page | Commands |
|---|---|
| up and down | up, down |
| Lifecycle | start, stop, kill, restart, pause/unpause |
| Images | build, pull |
| Inspecting | ps, config, logs, top, events, port |
| exec, run and cp | exec, run, cp |
extensions - no docker compose counterpart, or better than the one there
is:
| Page | Commands |
|---|---|
| Extensions | backup, list, port-forward, incus, healthd, self-update |
version prints the incus-compose version and belongs to neither:
incus-compose version
Most docker compose verbs map directly. Anything without a dedicated command
is reachable through the incus-compose incus passthrough, which runs any
incus command scoped to the current project.
docker compose |
incus-compose | Notes |
|---|---|---|
up |
up |
|
down |
down |
|
start / stop / restart |
start / stop / restart |
|
ps |
ps |
|
logs |
logs |
|
exec |
exec |
|
build |
build |
|
config |
config |
|
pull |
pull |
|
images |
config --images |
Or incus-compose incus image list. |
cp |
cp |
Owned by the instance's user, not root. |
top |
top |
Per instance, not per process. No service filter. |
events |
events |
Lifecycle events by default. No service filter. |
kill |
kill |
SIGKILL only; Incus delivers no other signal. |
run |
run |
The command is not PID 1; see run. |
pause / unpause |
pause / unpause |
Incus freeze/unfreeze; no timeout to give. |
port |
port |
A stopped instance answers too. |
| - | port-forward |
No docker equivalent: reaches a port that was never published. |