Selaa lähdekoodia

introduce --all-resources to _not_ exclude resources not used by services

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 1 vuosi sitten
vanhempi
sitoutus
865a64afea
4 muutettua tiedostoa jossa 21 lisäystä ja 7 poistoa
  1. 6 3
      cmd/compose/compose.go
  2. 4 4
      cmd/compose/up.go
  3. 1 0
      docs/reference/compose.md
  4. 10 0
      docs/reference/docker_compose.yaml

+ 6 - 3
cmd/compose/compose.go

@@ -132,6 +132,7 @@ type ProjectOptions struct {
 	Compatibility bool
 	Progress      string
 	Offline       bool
+	All           bool
 }
 
 // ProjectFunc does stuff within a types.Project
@@ -175,6 +176,7 @@ func (o *ProjectOptions) addProjectFlags(f *pflag.FlagSet) {
 	f.StringVar(&o.WorkDir, "workdir", "", "DEPRECATED! USE --project-directory INSTEAD.\nSpecify an alternate working directory\n(default: the path of the, first specified, Compose file)")
 	f.BoolVar(&o.Compatibility, "compatibility", false, "Run compose in backward compatibility mode")
 	f.StringVar(&o.Progress, "progress", string(buildkit.AutoMode), fmt.Sprintf(`Set type of progress output (%s)`, strings.Join(printerModes, ", ")))
+	f.BoolVar(&o.All, "all-resources", false, "Include all resources, even those not used by services")
 	_ = f.MarkHidden("workdir")
 }
 
@@ -231,9 +233,8 @@ func (o *ProjectOptions) ToModel(ctx context.Context, dockerCli command.Cli, ser
 	return options.LoadModel(ctx)
 }
 
-func (o *ProjectOptions) ToProject(ctx context.Context, dockerCli command.Cli, services []string, po ...cli.ProjectOptionsFn) (*types.Project, tracing.Metrics, error) {
+func (o *ProjectOptions) ToProject(ctx context.Context, dockerCli command.Cli, services []string, po ...cli.ProjectOptionsFn) (*types.Project, tracing.Metrics, error) { //nolint:gocyclo
 	var metrics tracing.Metrics
-
 	remotes := o.remoteLoaders(dockerCli)
 	for _, r := range remotes {
 		po = append(po, cli.WithResourceLoader(r))
@@ -300,7 +301,9 @@ func (o *ProjectOptions) ToProject(ctx context.Context, dockerCli command.Cli, s
 		project.Services[name] = s
 	}
 
-	project = project.WithoutUnnecessaryResources()
+	if !o.All {
+		project = project.WithoutUnnecessaryResources()
+	}
 
 	project, err = project.WithSelectedServices(services)
 	return project, metrics, err

+ 4 - 4
cmd/compose/up.go

@@ -125,6 +125,10 @@ func upCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service, ex
 
 			up.validateNavigationMenu(dockerCli, experiments)
 
+			if !p.All && len(project.Services) == 0 {
+				return fmt.Errorf("no service selected")
+			}
+
 			return runUp(ctx, dockerCli, backend, create, up, build, project, services)
 		}),
 		ValidArgsFunction: completeServiceNames(dockerCli, p),
@@ -205,10 +209,6 @@ func runUp(
 	project *types.Project,
 	services []string,
 ) error {
-	if len(project.Services) == 0 {
-		return fmt.Errorf("no service selected")
-	}
-
 	err := createOptions.Apply(project)
 	if err != nil {
 		return err

+ 1 - 0
docs/reference/compose.md

@@ -43,6 +43,7 @@ Define and run multi-container applications with Docker
 
 | Name                   | Type          | Default | Description                                                                                         |
 |:-----------------------|:--------------|:--------|:----------------------------------------------------------------------------------------------------|
+| `--all-resources`      |               |         | Include all resources, even those not used by services                                              |
 | `--ansi`               | `string`      | `auto`  | Control when to print ANSI control characters ("never"\|"always"\|"auto")                           |
 | `--compatibility`      |               |         | Run compose in backward compatibility mode                                                          |
 | `--dry-run`            |               |         | Execute command in dry run mode                                                                     |

+ 10 - 0
docs/reference/docker_compose.yaml

@@ -208,6 +208,16 @@ clink:
     - docker_compose_wait.yaml
     - docker_compose_watch.yaml
 options:
+    - option: all-resources
+      value_type: bool
+      default_value: "false"
+      description: Include all resources, even those not used by services
+      deprecated: false
+      hidden: false
+      experimental: false
+      experimentalcli: false
+      kubernetes: false
+      swarm: false
     - option: ansi
       value_type: string
       default_value: auto