From a70a5d7ae1e171fa64bc662d3c54be4592733d57 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Mon, 1 Dec 2025 08:59:17 +0100 Subject: [PATCH] add --wait option to start command Signed-off-by: Nicolas De Loof --- cmd/compose/start.go | 17 ++++++++++++++--- docs/reference/compose_start.md | 8 +++++--- docs/reference/docker_compose_start.yaml | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/cmd/compose/start.go b/cmd/compose/start.go index 3ef92dc973f..3a2bd2afad1 100644 --- a/cmd/compose/start.go +++ b/cmd/compose/start.go @@ -18,6 +18,7 @@ package compose import ( "context" + "time" "github.com/docker/cli/cli/command" "github.com/docker/compose/v5/pkg/api" @@ -27,6 +28,8 @@ import ( type startOptions struct { *ProjectOptions + wait bool + waitTimeout int } func startCommand(p *ProjectOptions, dockerCli command.Cli, backendOptions *BackendOptions) *cobra.Command { @@ -41,6 +44,10 @@ func startCommand(p *ProjectOptions, dockerCli command.Cli, backendOptions *Back }), ValidArgsFunction: completeServiceNames(dockerCli, p), } + flags := startCmd.Flags() + flags.BoolVar(&opts.wait, "wait", false, "Wait for services to be running|healthy. Implies detached mode.") + flags.IntVar(&opts.waitTimeout, "wait-timeout", 0, "Maximum duration in seconds to wait for the project to be running|healthy") + return startCmd } @@ -54,9 +61,13 @@ func runStart(ctx context.Context, dockerCli command.Cli, backendOptions *Backen if err != nil { return err } + + timeout := time.Duration(opts.waitTimeout) * time.Second return backend.Start(ctx, name, api.StartOptions{ - AttachTo: services, - Project: project, - Services: services, + AttachTo: services, + Project: project, + Services: services, + Wait: opts.wait, + WaitTimeout: timeout, }) } diff --git a/docs/reference/compose_start.md b/docs/reference/compose_start.md index 08db7ef2135..06229e5940e 100644 --- a/docs/reference/compose_start.md +++ b/docs/reference/compose_start.md @@ -5,9 +5,11 @@ Starts existing containers for a service ### Options -| Name | Type | Default | Description | -|:------------|:-------|:--------|:--------------------------------| -| `--dry-run` | `bool` | | Execute command in dry run mode | +| Name | Type | Default | Description | +|:-----------------|:-------|:--------|:---------------------------------------------------------------------------| +| `--dry-run` | `bool` | | Execute command in dry run mode | +| `--wait` | `bool` | | Wait for services to be running\|healthy. Implies detached mode. | +| `--wait-timeout` | `int` | `0` | Maximum duration in seconds to wait for the project to be running\|healthy | diff --git a/docs/reference/docker_compose_start.yaml b/docs/reference/docker_compose_start.yaml index 902b688d3e7..56f9bcdff7c 100644 --- a/docs/reference/docker_compose_start.yaml +++ b/docs/reference/docker_compose_start.yaml @@ -4,6 +4,28 @@ long: Starts existing containers for a service usage: docker compose start [SERVICE...] pname: docker compose plink: docker_compose.yaml +options: + - option: wait + value_type: bool + default_value: "false" + description: Wait for services to be running|healthy. Implies detached mode. + deprecated: false + hidden: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false + - option: wait-timeout + value_type: int + default_value: "0" + description: | + Maximum duration in seconds to wait for the project to be running|healthy + deprecated: false + hidden: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false inherited_options: - option: dry-run value_type: bool