From 580be17d58524f40c478d9ac626ff31c62af60e9 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Mon, 23 Jun 2025 22:03:35 +0200 Subject: [PATCH 1/3] don't create from run command during dependencies creation process Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- pkg/compose/run.go | 18 +++++++++++------- pkg/e2e/compose_run_test.go | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/pkg/compose/run.go b/pkg/compose/run.go index db8ed34dedb..c37e9305a94 100644 --- a/pkg/compose/run.go +++ b/pkg/compose/run.go @@ -176,18 +176,22 @@ func applyRunOptions(project *types.Project, service *types.ServiceConfig, opts } func (s *composeService) startDependencies(ctx context.Context, project *types.Project, options api.RunOptions) error { - var dependencies []string - for name := range project.Services { + dependencies := types.Services{} + var requestedService types.ServiceConfig + for name, service := range project.Services { if name != options.Service { - dependencies = append(dependencies, name) + dependencies[name] = service + } else { + requestedService = service } } - project, err := project.WithSelectedServices(dependencies) - if err != nil { - return err + if len(dependencies) > 0 { + project.Services = dependencies + project.DisabledServices[options.Service] = requestedService } - err = s.Create(ctx, project, api.CreateOptions{ + + err := s.Create(ctx, project, api.CreateOptions{ Build: options.Build, IgnoreOrphans: options.IgnoreOrphans, RemoveOrphans: options.RemoveOrphans, diff --git a/pkg/e2e/compose_run_test.go b/pkg/e2e/compose_run_test.go index acf1bdf8172..846d62c92cd 100644 --- a/pkg/e2e/compose_run_test.go +++ b/pkg/e2e/compose_run_test.go @@ -196,4 +196,18 @@ func TestLocalComposeRun(t *testing.T) { "front", "env") res.Assert(t, icmd.Expected{Out: "FOO=BAR"}) }) + + t.Run("compose run -rm with stop signal", func(t *testing.T) { + projectName := "run-test" + res := c.RunDockerComposeCmd(t, "--project-name", projectName, "-f", "./fixtures/ps-test/compose.yaml", "run", "--rm", "-d", "nginx") + res.Assert(t, icmd.Success) + + res = c.RunDockerCmd(t, "ps", "--quiet", "--filter", "name=run-test-nginx") + containerID := strings.TrimSpace(res.Stdout()) + + res = c.RunDockerCmd(t, "stop", containerID) + res.Assert(t, icmd.Success) + res = c.RunDockerCmd(t, "ps", "--all", "--filter", "name=run-test-nginx", "--format", "'{{.Names}}'") + assert.Assert(t, !strings.Contains(res.Stdout(), "run-test-nginx"), res.Stdout()) + }) } From faac161b22be756f8a120200e9fa2e5aafdc5e44 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Mon, 23 Jun 2025 22:03:35 +0200 Subject: [PATCH 2/3] don't create from run command during dependencies creation process Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- pkg/compose/run.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/compose/run.go b/pkg/compose/run.go index c37e9305a94..37a9c250d1b 100644 --- a/pkg/compose/run.go +++ b/pkg/compose/run.go @@ -190,8 +190,10 @@ func (s *composeService) startDependencies(ctx context.Context, project *types.P project.Services = dependencies project.DisabledServices[options.Service] = requestedService } + project.DisabledServices[options.Service] = requestedService + delete(project.Services, options.Service) - err := s.Create(ctx, project, api.CreateOptions{ + err = s.Create(ctx, project, api.CreateOptions{ Build: options.Build, IgnoreOrphans: options.IgnoreOrphans, RemoveOrphans: options.RemoveOrphans, From e1e92eac3a8b719ab24c72048324ba8de90ef963 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 24 Jun 2025 11:11:43 +0200 Subject: [PATCH 3/3] setting buildOptions.Services triggers image to be always rebuilt Signed-off-by: Nicolas De Loof --- cmd/compose/run.go | 2 +- pkg/compose/run.go | 21 +++------------------ 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/cmd/compose/run.go b/cmd/compose/run.go index 3ae8b9d9578..2bf126fefb9 100644 --- a/cmd/compose/run.go +++ b/cmd/compose/run.go @@ -282,7 +282,7 @@ func runRun(ctx context.Context, backend api.Service, project *types.Project, op var buildForRun *api.BuildOptions if !createOpts.noBuild { - bo, err := buildOpts.toAPIBuildOptions(project.ServiceNames()) + bo, err := buildOpts.toAPIBuildOptions(nil) if err != nil { return err } diff --git a/pkg/compose/run.go b/pkg/compose/run.go index 37a9c250d1b..a16b6b22d18 100644 --- a/pkg/compose/run.go +++ b/pkg/compose/run.go @@ -176,24 +176,9 @@ func applyRunOptions(project *types.Project, service *types.ServiceConfig, opts } func (s *composeService) startDependencies(ctx context.Context, project *types.Project, options api.RunOptions) error { - dependencies := types.Services{} - var requestedService types.ServiceConfig - for name, service := range project.Services { - if name != options.Service { - dependencies[name] = service - } else { - requestedService = service - } - } - - if len(dependencies) > 0 { - project.Services = dependencies - project.DisabledServices[options.Service] = requestedService - } - project.DisabledServices[options.Service] = requestedService - delete(project.Services, options.Service) + project = project.WithServicesDisabled(options.Service) - err = s.Create(ctx, project, api.CreateOptions{ + err := s.Create(ctx, project, api.CreateOptions{ Build: options.Build, IgnoreOrphans: options.IgnoreOrphans, RemoveOrphans: options.RemoveOrphans, @@ -203,7 +188,7 @@ func (s *composeService) startDependencies(ctx context.Context, project *types.P return err } - if len(dependencies) > 0 { + if len(project.Services) > 0 { return s.Start(ctx, project.Name, api.StartOptions{ Project: project, })