diff --git a/internal/compose/compose.go b/internal/compose/compose.go index 9b8ceda59b..97dd8dd30e 100644 --- a/internal/compose/compose.go +++ b/internal/compose/compose.go @@ -242,6 +242,19 @@ func (p *Project) Up(opts CommandOptions) error { return nil } +// Stop stops a Docker Compose project. +func (p *Project) Stop(opts CommandOptions) error { + args := p.baseArgs() + args = append(args, "stop") + args = append(args, opts.ExtraArgs...) + + if err := p.runDockerComposeCmd(dockerComposeOptions{args: args, env: opts.Env}); err != nil { + return fmt.Errorf("running Docker Compose stop command failed: %w", err) + } + + return nil +} + // Down tears down a Docker Compose project. func (p *Project) Down(opts CommandOptions) error { args := p.baseArgs() diff --git a/internal/servicedeployer/compose.go b/internal/servicedeployer/compose.go index e382e1a0b2..175c93dc4c 100644 --- a/internal/servicedeployer/compose.go +++ b/internal/servicedeployer/compose.go @@ -225,6 +225,13 @@ func (s *dockerComposeDeployedService) TearDown() error { s.env, s.variant.Env...), } + if err := p.Stop(compose.CommandOptions{ + Env: opts.Env, + ExtraArgs: []string{"-t", "300"}, // default shutdown timeout 10 seconds + }); err != nil { + return fmt.Errorf("could not stop service using Docker Compose: %w", err) + } + processServiceContainerLogs(p, opts, s.ctxt.Name) if err := p.Down(compose.CommandOptions{