Two weeks after 1.1, and the biggest release since 1.0.
What 1.2 brings
One ic-healthd for the whole server. Every project used to get its own
sidecar: ten projects meant ten containers, ten event listeners, ten
certificates. Now up creates a single shared daemon and marks your project so
that daemon picks it up. A project costs a goroutine and a map entry instead of
a container, and the daemon’s limits.* no longer land in your project’s quota.
Reusable builds. A service with build: no longer rebuilds in every
project. The image cache is checked before the builder runs, so the first up
anywhere builds and every project after that copies. A machine with no local
podman/docker/buildah, common on Windows and macOS, can now run a compose
file with build: in it.
entrypoint:. Supported, and it follows the compose spec: it replaces the
image’s entrypoint and discards the image’s default command, so the container
runs exactly entrypoint: plus command: with nothing inherited.
The image cache moved out of the Incus default project into its own
incus-compose-cache. Whatever earlier versions cached in default stays there
and nothing will ever read it again.
The
v1.2 rc announcement
covers all of that in full, including a script to clean out the old cache if you
want the space back, and why command: on its own will change one day. What
follows is what happened after the rc.
Updating
curl -sSfL https://raw.githubusercontent.com/lxc/incus-compose/main/install.sh | sh -s -- -b ~/.local/bin
incus-compose up --detach # once per compose project
To see which projects still run a sidecar of their own:
incus list --all-projects --format=compact | grep healthd
Not self-update from 1.0.0 or 1.1.0. It is one of the things this release
fixes: it ignores your platform and always downloads the macOS build, so the
broken copy is the one you have and it cannot replace itself. One reinstall, and
self-update works from here on. From a 1.2 rc it already does.
That up per project is the migration. It stamps the project’s healthd scope
and the per-instance health-check opt-in in place: no --recreate, no downtime,
containers keep running. Skip a project and nothing breaks, it stays on its own
sidecar and behaves like 1.1.0.
rc users upgrade by incus-compose self-update && incus-compose healthd down --force && incus-compose healthd up
Since the rc
1. Working on several services at once no longer races
Every worker drove one shared Incus client, whose event-listener state cannot be
used from more than one goroutine. Each has its own connection now, through
iclient, our fork of the Incus client. The races that sat on top of the old
one are gone with it: two workers setting up the image lock volume at once,
simultaneous starts resolving which ic-healthd watches the project, and a wait
for an instance’s addresses that stalled DNS registration until the timeout.
2. up --build recreates what it rebuilt
The image was rebuilt but the existing instances kept the old one until
--recreate was passed as well. Services that only consume an image another
service builds are recreated too; everything else is left alone.
3. Timeouts mean what they say
A start or stop held up by another operation on the same instance no longer
spends its --timeout backing off, ic-healthd waits for the instance lock to
clear instead of retrying on a fixed delay, and waiting for an image to appear
in the cache gives up after the five minutes it claims. That last one took its
delay as the starting point for exponential backoff and ignored cancellation, so
ten attempts could span hours no interrupt would end.
Plenty of smaller changes and fixes have landed since v1.1.0; the CHANGELOG has
those.
First install
The same one-liner as above.
Arch users: incus-compose-bin and incus-compose-git, maintained by @neitsab and @jochumdev.
Debian users: zabbly/incus ships incus-compose via its incus-extra package.
Docs: Health Checking ·
docs.incus-compose.org ·
Full changelog: CHANGELOG.md
What’s next: backup (#45)
with @ishaan-jindal, OVN network support
(#15) and network ACLs
(#98) still in design.
Thanks to
- @blurry for testing every rc and for the report that got the
shared daemon out of thedefaultproject - @alien43 for three patches - compose
sysctls:, NICs on unmanaged bridges, and
a healthd trust-token fix - @ishaan-jindal for working on backup
- @tofil for planning and researching an upcoming DNS feature
- @stgraber for the consulting and the upstream fixes
And to everyone testing, reporting bugs, spreading the word, and just using
incus-compose.
Real-world compose files remain the most useful bug reports.
René
Repo: GitHub - lxc/incus-compose: Bring the familiar Docker Compose workflow to Incus — run compose.yaml files natively on Incus · GitHub
Releases: Releases · lxc/incus-compose · GitHub
Changelog: incus-compose/CHANGELOG.md at main · lxc/incus-compose · GitHub
Previous threads: v1.0 · v1.1 · v1.2-rc