From 3ee2ab87bb1e7500a2b7900e1022e0c4b1c1426b Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Mon, 12 Dec 2022 09:29:24 +0100 Subject: [PATCH] ContainerStart must run sequentially for engine to assing distinct ports within configured range Signed-off-by: Nicolas De Loof --- pkg/compose/convergence.go | 18 +++++++----------- pkg/e2e/compose_up_test.go | 10 ++++++++++ pkg/e2e/fixtures/port-range/compose.yaml | 6 ++++++ 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 pkg/e2e/fixtures/port-range/compose.yaml diff --git a/pkg/compose/convergence.go b/pkg/compose/convergence.go index 710931f97..60f343228 100644 --- a/pkg/compose/convergence.go +++ b/pkg/compose/convergence.go @@ -721,21 +721,17 @@ func (s *composeService) startService(ctx context.Context, project *types.Projec } w := progress.ContextWriter(ctx) - eg, ctx := errgroup.WithContext(ctx) for _, container := range containers { if container.State == ContainerRunning { continue } - container := container - eg.Go(func() error { - eventName := getContainerProgressName(container) - w.Event(progress.StartingEvent(eventName)) - err := s.apiClient().ContainerStart(ctx, container.ID, moby.ContainerStartOptions{}) - if err == nil { - w.Event(progress.StartedEvent(eventName)) - } + eventName := getContainerProgressName(container) + w.Event(progress.StartingEvent(eventName)) + err := s.apiClient().ContainerStart(ctx, container.ID, moby.ContainerStartOptions{}) + if err != nil { return err - }) + } + w.Event(progress.StartedEvent(eventName)) } - return eg.Wait() + return nil } diff --git a/pkg/e2e/compose_up_test.go b/pkg/e2e/compose_up_test.go index 738d60449..f8a2093c6 100644 --- a/pkg/e2e/compose_up_test.go +++ b/pkg/e2e/compose_up_test.go @@ -56,3 +56,13 @@ func TestUpExitCodeFrom(t *testing.T) { c.RunDockerComposeCmd(t, "--project-name", projectName, "down", "--remove-orphans") } + +func TestPortRange(t *testing.T) { + c := NewParallelCLI(t) + const projectName = "e2e-port-range" + + res := c.RunDockerComposeCmdNoCheck(t, "-f", "fixtures/port-range/compose.yaml", "--project-name", projectName, "up", "-d") + res.Assert(t, icmd.Success) + + c.RunDockerComposeCmd(t, "--project-name", projectName, "down", "--remove-orphans") +} diff --git a/pkg/e2e/fixtures/port-range/compose.yaml b/pkg/e2e/fixtures/port-range/compose.yaml new file mode 100644 index 000000000..447618499 --- /dev/null +++ b/pkg/e2e/fixtures/port-range/compose.yaml @@ -0,0 +1,6 @@ +services: + a: + image: nginx:alpine + scale: 5 + ports: + - "6005-6015:80" \ No newline at end of file