Browse Source

ContainerStart must run sequentially for engine to assing distinct ports within configured range

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 2 years ago
parent
commit
3ee2ab87bb
3 changed files with 23 additions and 11 deletions
  1. 7 11
      pkg/compose/convergence.go
  2. 10 0
      pkg/e2e/compose_up_test.go
  3. 6 0
      pkg/e2e/fixtures/port-range/compose.yaml

+ 7 - 11
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
 }

+ 10 - 0
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")
+}

+ 6 - 0
pkg/e2e/fixtures/port-range/compose.yaml

@@ -0,0 +1,6 @@
+services:
+  a:
+    image: nginx:alpine
+    scale: 5
+    ports:
+      - "6005-6015:80"