Skip to content

fix: start and install on dockerd 29; e2e on both image stores - #146

Merged
mike-sul merged 4 commits into
mainfrom
fix/start-cleanup-dockerd-29
Oct 9, 2026
Merged

mike-sul merged 4 commits into
mainfrom
fix/start-cleanup-dockerd-29

Conversation

@mike-sul

@mike-sul mike-sul commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Why

Devices run dockerd with the overlay2 graphdriver and with the containerd image store. The e2e
suite covered only overlay2 on moby 25.0.3. Running it on dockerd 29.7.2 with both stores found
two composectl bugs that affect devices.

Changes

  • fix(start): remove containers left by a failed start. When docker compose up fails,
    containers that were created but never started stay behind. Docker 29.7.2 starts such a
    container on the next attempt without its published port (25.0.3 kept refusing). A retried
    update then reported success with an unreachable service. composectl now removes these
    containers after a failed start.
  • fix(install): check progress reporter on containerd load. On the containerd image store,
    an install without progress reporting panicked with a nil-pointer dereference at the first
    Loaded image: message.
  • test(compose): run e2e on dockerd 29 with both stores.
    • The test dockerd is stock 29.7.2 with containerd 2.4.1, built from
      test/compose/dockerd/Dockerfile on first start.
    • CONTAINERD_SNAPSHOTTER (default false) selects the image store, and CI runs the suite
      once per store.
    • A separate publisher dockerd, always on overlay2, plays the FoundriesFactory CI when tests
      publish apps, because the layer-size script reads an overlay2 store.
    • The patched-load step of TestAppImageLoading runs only with DOCKERD_FIO_PATCH=1.

Testing

  • make check and make test-unit pass.
  • make test-e2e passes with CONTAINERD_SNAPSHOTTER=false and with true.
  • The fix(start) commit also passes the e2e suite on the previous moby 25.0.3 daemon.

Notes

  • The Foundries dockerd patches are no longer exercised in CI: the moby fork is private and there
    is no published 29.7.2_fio image.

🤖 Generated with Claude Code

When docker compose up fails, containers that were created but not
started stay behind. On the next attempt, compose starts them again,
and Docker 29.7.2 lets such a container run without its published
ports after a host port conflict. A retried update then reports
success while a service is unreachable. Removing these containers
right after the failure makes every attempt create them afresh, so a
retry fails the same way the first attempt did.

Signed-off-by: Mike Sul <mike.sul@foundries.io>
Assisted-by: Claude Code:claude-opus-5-5
On a dockerd that uses the containerd image store, loading images
without a progress reporter panics with a nil pointer dereference at
the first "Loaded image:" message: the containerd branch calls the
reporter unconditionally while the graphdriver branch checks it.
Install calls the loader without a reporter when no progress is
requested, so such an install crashes composectl.

Signed-off-by: Mike Sul <mike.sul@foundries.io>
Assisted-by: Claude Code:claude-opus-5-5
Devices run dockerd both with the overlay2 graphdriver and with the
containerd image store, and the test environment covered only the
former on dockerd 25. The test dockerd is now stock 29.7.2 with
containerd 2.4.1, built on first start, and CONTAINERD_SNAPSHOTTER
selects the image store; CI runs the suite once per store.

Publishing test apps reads layer sizes from an overlay2 docker store,
which the containerd image store does not have. A separate publisher
dockerd, always on overlay2, now plays the FoundriesFactory CI so the
device dockerd can use either store.

The patched image loading in TestAppImageLoading needs the Foundries
dockerd patches, which the stock daemon lacks; it now runs only when
DOCKERD_FIO_PATCH=1.

Signed-off-by: Mike Sul <mike.sul@foundries.io>
Assisted-by: Claude Code:claude-opus-5-5
Devices run dockerd with the Foundries patches, while composectl must
also work with a stock dockerd on any host. DOCKERD_FIO_PATCH=1 now
builds the test dockerd from ghcr.io/foundriesio/moby:29.7.2_fio
instead of the stock dind image, besides enabling the patched image
loading test. CI runs the suite for each daemon and image store.

Signed-off-by: Mike Sul <mike.sul@foundries.io>
Assisted-by: Claude Code:claude-opus-5-5
@mike-sul
mike-sul marked this pull request as ready for review October 9, 2026 07:22
@mike-sul
mike-sul merged commit 4dd7a39 into main Oct 9, 2026
7 checks passed
@mike-sul
mike-sul deleted the fix/start-cleanup-dockerd-29 branch October 9, 2026 07:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant