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 db8ed34dedb..a16b6b22d18 100644 --- a/pkg/compose/run.go +++ b/pkg/compose/run.go @@ -176,18 +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 { - var dependencies []string - for name := range project.Services { - if name != options.Service { - dependencies = append(dependencies, name) - } - } + project = project.WithServicesDisabled(options.Service) - project, err := project.WithSelectedServices(dependencies) - if err != nil { - return err - } - err = s.Create(ctx, project, api.CreateOptions{ + err := s.Create(ctx, project, api.CreateOptions{ Build: options.Build, IgnoreOrphans: options.IgnoreOrphans, RemoveOrphans: options.RemoveOrphans, @@ -197,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, }) 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()) + }) }