Browse Source

fix(containers): fix sorting logic by adding secondary sorting for one-off containers

Signed-off-by: Suleiman Dibirov <[email protected]>
Suleiman Dibirov 1 year ago
parent
commit
4f9db4d3e6
1 changed files with 12 additions and 3 deletions
  1. 12 3
      pkg/compose/containers.go

+ 12 - 3
pkg/compose/containers.go

@@ -93,10 +93,19 @@ func (s *composeService) getSpecifiedContainer(ctx context.Context, projectName
 		}
 		return moby.Container{}, fmt.Errorf("service %q is not running", serviceName)
 	}
+
+	// Sort by container number first, then put one-off containers at the end
 	sort.Slice(containers, func(i, j int) bool {
-		x, _ := strconv.Atoi(containers[i].Labels[api.ContainerNumberLabel])
-		y, _ := strconv.Atoi(containers[j].Labels[api.ContainerNumberLabel])
-		return x < y
+		numberLabelX, _ := strconv.Atoi(containers[i].Labels[api.ContainerNumberLabel])
+		numberLabelY, _ := strconv.Atoi(containers[j].Labels[api.ContainerNumberLabel])
+		IsOneOffLabelTrueX := containers[i].Labels[api.OneoffLabel] == "True"
+		IsOneOffLabelTrueY := containers[j].Labels[api.OneoffLabel] == "True"
+
+		if numberLabelX == numberLabelY {
+			return !IsOneOffLabelTrueX && IsOneOffLabelTrueY
+		}
+
+		return numberLabelX < numberLabelY
 	})
 	container := containers[0]
 	return container, nil