diff --git a/pkg/compose/convergence.go b/pkg/compose/convergence.go index 99436ae57..ab3091bf5 100644 --- a/pkg/compose/convergence.go +++ b/pkg/compose/convergence.go @@ -650,9 +650,14 @@ func (s *composeService) recreateContainer(ctx context.Context, project *types.P return created, err } +// force sequential calls to ContainerStart to prevent race condition in engine assigning ports from ranges +var startMx sync.Mutex + func (s *composeService) startContainer(ctx context.Context, ctr containerType.Summary) error { w := progress.ContextWriter(ctx) w.Event(progress.NewEvent(getContainerProgressName(ctr), progress.Working, "Restart")) + startMx.Lock() + defer startMx.Unlock() err := s.apiClient().ContainerStart(ctx, ctr.ID, containerType.StartOptions{}) if err != nil { return err diff --git a/pkg/e2e/fixtures/port-range/compose.yaml b/pkg/e2e/fixtures/port-range/compose.yaml index 447618499..65f6fde61 100644 --- a/pkg/e2e/fixtures/port-range/compose.yaml +++ b/pkg/e2e/fixtures/port-range/compose.yaml @@ -3,4 +3,14 @@ services: image: nginx:alpine scale: 5 ports: - - "6005-6015:80" \ No newline at end of file + - "6005-6015:80" + + b: + image: nginx:alpine + ports: + - 80 + + c: + image: nginx:alpine + ports: + - 80 \ No newline at end of file