Commit Graph
1399 Commits
Author SHA1 Message Date
Guillaume Lours 6f0dccbdc2 fix: treat container exit code 0 as success in --wait mode
When using , containers that exit with code 0 (such
  as init or oneshot containers) were incorrectly treated as failures,
  causing the command to return exit code 1.

  Introduce a typed containerExitError in isServiceHealthy and handle
  exit code 0 in the RunningOrHealthy wait path. Services with restart
  policies that restart on clean exit (always, unless-stopped) are
  excluded via restartsOnExit0 to avoid false positives.

  Fixes #10596

Signed-off-by: Guillaume Lours <[email protected]>
2026-03-24 15:58:23 +01:00
Ishwar b18354b9f4 refactor: thread context through publish sensitive data check
Signed-off-by: Ishwar <[email protected]>
2026-03-23 12:10:25 +01:00
Nicolas De Loof 5de4353a6a bump golangci-lint to latest and configure CLAUDE to use it on change
Signed-off-by: Nicolas De Loof <[email protected]>
2026-03-23 11:33:52 +01:00
Michael Irwin 4915b775ee fix: only pass ConsoleSize to ExecAttach when TTY is enabled
The moby/moby client (v0.2.2) validates that ConsoleSize is zero when
TTY is disabled, returning "console size is only supported when TTY is
enabled" otherwise. Previously, ConsoleSize was populated unconditionally
from GetTtySize(), which returns real terminal dimensions when Compose is
run interactively — causing post_start hooks to fail for services without
`tty: true`.

Fix by only reading and passing the console size when service.Tty is true.

Signed-off-by: Michael Irwin <[email protected]>

Resolves #13615
2026-03-04 19:53:35 +01:00
Varun Chawla 81d7d3c60b fix: execute post_start hooks in docker compose run
RunOneOffContainer was not executing post_start lifecycle hooks after
starting a container. This adds hook execution by listening for the
container's start event via the Docker Events API and running hooks
once the container is running, matching the behavior already present
in startService (used by docker compose up) and restart.

Signed-off-by: Varun Chawla <[email protected]>
2026-02-23 08:58:31 +01:00
Sebastiaan van Stijn f9828dfab9 modernize some code
Results of running the modernize command, with some minor changes
afterwards (removing the `contains` and `hasStatus` helper functions);

    go install golang.org/x/tools/go/analysis/passes/modernize/cmd/modernize@latest
    modernize -fix ./...

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-12 15:31:35 +01:00
Sebastiaan van Stijn da691c7cc1 pkg/compose: un-export consts
These consts were added in b760afaf9f,
but are only user internal in the package. Given that the list of
consts may change over time, it's probably best to keep them internal
and not part of the module's API.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 22:26:15 +01:00
Sebastiaan van Stijn fefdc95224 pkg/compose: defaultNetworkSettings: slight refactor
- use an intermediate serviceNetworks slice so that we don't have
  to call service.NetworksByPriority multiple times.
- shift the primary network from the slice (if any), so that
  we can drop some checks for "additional networks"
- group code related to setting up the primary network as first
  step, then append remaining networks.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 15:14:49 +01:00
Sebastiaan van Stijn 08c32e9033 pkg/compose: defaultNetworkSettings: return early for unsupported feature
Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 15:14:49 +01:00
Sebastiaan van Stijn bdb630fb89 pkg/compose: format layer push progress
Format layer progress details with minimal efforts as new UI does
not render individual layers.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Nicolas De Loof 3697b128a1 pkg/compose: format layer pull progress
Format layer progress details with minimal efforts as new UI
does not render individual layers

Signed-off-by: Nicolas De Loof <[email protected]>
Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Sebastiaan van Stijn b285e48976 pkg/compose: remove unused consts
Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Sebastiaan van Stijn 8193d86d2f pkg/bridge: remove uses of go-connections
Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Sebastiaan van Stijn bfb5511d0d go.mod: bump github.com/moby/moby/api v1.53.0, moby/client v0.2.2
Also update TestDefaultNetworkSettings:
Test that the network with the highest priority is returned as
"primary" network, and other networks as extra networks.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Sebastiaan van Stijn 8b769bad6b pkg/compose: remove dependency on github.com/docker/buildx/driver
The driver.Auth interface was describing the configfile.GetAuthConfig
implementation; define a local interface instead of using buildx's
definition as an intermediate.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-01-29 15:59:03 +01:00
Nicolas De Loof 671507a8b3 fix panic
Signed-off-by: Nicolas De Loof <[email protected]>
2026-01-29 09:57:49 +01:00
ibrahim yapar 56ab28aef3 compose: recreate container when mounted image digest changes
Until now, mustRecreate logic only checked for divergence in TypeVolume
mounts but ignored TypeImage mounts. This inconsistency caused containers
to erroneously retain stale images even after the source image was rebuilt.
This commit updates ensureImagesExists to resolve image volume sources to
their digests using the official reference package. This enables ServiceHash
(config hash) to naturally detect underlying image digest changes,
triggering recreation via the standard convergence logic.
An E2E test case is added to verify this behavior.
Fixes #13547

Signed-off-by: ibrahim yapar <[email protected]>
2026-01-26 15:55:44 +01:00
Nepomuk Crhonek d5bb3387ca Fix potential nil pointer dereference in container event monitoring
The condition for checking container restart state had incorrect operator
precedence. The expression:

  inspect.State != nil && inspect.State.Restarting || inspect.State.Running

is evaluated as:

  (inspect.State != nil && inspect.State.Restarting) || inspect.State.Running

This means if inspect.State is nil and inspect.State.Restarting is false
(which would trigger a panic), the code would attempt to access
inspect.State.Running, causing a nil pointer dereference.

This fix adds parentheses to ensure the nil check applies to both
state checks:

  inspect.State != nil && (inspect.State.Restarting || inspect.State.Running)

Signed-off-by: Nepomuk Crhonek <[email protected]>
2026-01-25 21:15:37 +01:00
Sebastiaan van Stijn c51b1fea29 replace some uses of strings.Split(N) for strings.Cut
Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-01-22 11:26:16 +01:00
Mahesh Thakur a061c17736 fix: emit container status events after network reconnection
Signed-off-by: Mahesh Thakur <[email protected]>
2026-01-21 09:40:05 +01:00
David Gageot 04b4a832dc chore(lint): add forbidigo rules to enforce t.Context() in tests
Add linter rules to prevent usage of context.Background() and
context.TODO() in test files - t.Context() should be used instead.

The rules only apply to *_test.go files, not production code.

Note: os.Setenv is not covered by forbidigo due to a limitation where
it only catches calls when the return value is assigned. However,
errcheck will flag unchecked os.Setenv calls.

Assisted-By: cagent
Signed-off-by: David Gageot <[email protected]>
2026-01-20 11:34:11 +01:00
David Gageot 27faa3b84e test: replace os.MkdirTemp with t.TempDir()
Use t.TempDir() which automatically cleans up the temporary directory
when the test completes, eliminating the need for manual cleanup.

Go 1.14 modernization pattern.

Assisted-By: cagent
Signed-off-by: David Gageot <[email protected]>
2026-01-20 11:34:11 +01:00
David Gageot bcc0401e0e test: replace os.Setenv with t.Setenv()
Use t.Setenv() which automatically restores the original value when
the test completes, eliminating the need for manual cleanup.

Go 1.18 modernization pattern.

Assisted-By: cagent
Signed-off-by: David Gageot <[email protected]>
2026-01-20 11:34:11 +01:00
David Gageot 093205121c test: replace context.Background()/context.TODO() with t.Context()
Replace manual context creation with t.Context() which is automatically
cancelled when the test completes.

Go 1.24 modernization pattern.

Assisted-By: cagent
Signed-off-by: David Gageot <[email protected]>
2026-01-20 11:34:11 +01:00
Amol Yadav b92b87dd9c fix: robustly handle large file change batches in watch mode
Ensured all watcher and sync goroutines and channels are robustly closed on context cancellation or error.
Added explicit logging for large batches and context cancellation to prevent stuck processes and ensure graceful shutdown on Ctrl-C.

Signed-off-by: Amol Yadav <[email protected]>
2026-01-20 08:34:15 +01:00
hiroto.toyoda d7bdb34ff5 refactor(attach): remove unused stdin from getContainerStream
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-19 17:46:55 +01:00
hiroto.toyoda 79d7a8acd6 refactor(attach): simplify attachContainerStreams signature
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-19 17:46:55 +01:00
hiroto.toyoda abd99be4fd refactor(attach): remove unused detach watcher and keep attach behavior
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-19 17:46:55 +01:00
hiroto.toyoda 2672d34217 Improve error handling in attach.go
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-19 17:46:55 +01:00
Stavros Kois 2f108ffaa8 handle healthcheck.disable true in isServiceHealthy
Signed-off-by: Stavros Kois <[email protected]>
2026-01-19 10:18:34 +01:00
hiroto.toyoda b760afaf9f refactor: extract API version constants to dedicated file
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-11 17:04:40 +01:00
Nicolas De Loof ec88588cd8 Removed build warning when no explicit build has been requested.
Signed-off-by: Nicolas De Loof <[email protected]>
2026-01-05 13:17:20 +01:00
hiroto.toyoda ee4c01b66b fix: correctly use errgroup.WithContext
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-05 09:27:46 +01:00
hiroto.toyoda d7a65f53f8 fix: correct typo in isSwarmEnabled method name
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-05 09:11:58 +01:00
hiroto.toyoda 4520bcbaf6 fix: clean up temporary compose files after conversion
Signed-off-by: hiroto.toyoda <[email protected]>
2026-01-05 09:01:56 +01:00
Ignacio López Luna 59f04b85af remove duplicated version field
Signed-off-by: Ignacio López Luna <[email protected]>
2025-12-18 15:24:06 +01:00
Ignacio López Luna b4574c8bd6 do not strip build metadata
Signed-off-by: Ignacio López Luna <[email protected]>
2025-12-18 15:24:06 +01:00
Ignacio López Luna 29d6c918c4 use github.com/docker/docker/api/types/versions for comparing versions and store plugin version obtained by pluginManager in newModelAPI
Signed-off-by: Ignacio López Luna <[email protected]>
2025-12-18 15:24:06 +01:00
Ignacio López Luna 58403169f3 Only append RuntimeFlags if docker model CLI version is >= v1.0.6
Signed-off-by: Ignacio López Luna <[email protected]>
2025-12-18 15:24:06 +01:00
Ignacio López Luna 6aee7f8370 gets back runtime flags when configuring models
Signed-off-by: Ignacio López Luna <[email protected]>
2025-12-18 15:24:06 +01:00
Nicolas De Loof c89b8a2d6b warn user no service has been selected to build
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-18 11:35:33 +01:00
Nicolas De Loof aec9f54176 check model plugin is successfully loaded and store version
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-18 11:01:35 +01:00
Nicolas De Loof 8e5b25c0f1 Restored support for BUILDKIT_PROGRESS.
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-15 18:03:04 +01:00
Nicolas De Loof d4c1987638 Prevented incorrect progress metrics to break compose display.
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-15 18:02:31 +01:00
Nicolas De Loof e22426443e Introduced fsnotify build tag to select watcher implementation
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-15 10:16:12 +01:00
Guillaume Lours 6599f8ad84 add 'configured' event at the end of model configuration phase
Currently when using models, the final message is 'confugiring' which could let users think the DMR configuration is still pending

Signed-off-by: Guillaume Lours <[email protected]>

# Conflicts:
#	pkg/api/event.go
2025-12-15 10:14:21 +01:00
Nicolas De Loof 02008a0097 Restored image layer download progress details on pull.
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-12 14:22:02 +01:00
xiaolinny 0878c59a74 chore: fix grammatical errors and improve clarity in code
Signed-off-by: xiaolinny <[email protected]>
2025-12-08 11:20:48 +01:00
Nicolas De Loof c0345e4f45 restore support for COMPOSE_COMPATIBILITY
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-07 18:42:04 +01:00
yangfeiyu 000a4a4b9f check buildx version before comparing it
Signed-off-by: yangfeiyu <[email protected]>
2025-12-04 08:34:13 +01:00