github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/system/df.go (about) 1 package system 2 3 import ( 4 "context" 5 6 "github.com/docker/cli/cli" 7 "github.com/docker/cli/cli/command" 8 "github.com/docker/cli/cli/command/completion" 9 "github.com/docker/cli/cli/command/formatter" 10 flagsHelper "github.com/docker/cli/cli/flags" 11 "github.com/docker/docker/api/types" 12 "github.com/spf13/cobra" 13 ) 14 15 type diskUsageOptions struct { 16 verbose bool 17 format string 18 } 19 20 // newDiskUsageCommand creates a new cobra.Command for `docker df` 21 func newDiskUsageCommand(dockerCli command.Cli) *cobra.Command { 22 var opts diskUsageOptions 23 24 cmd := &cobra.Command{ 25 Use: "df [OPTIONS]", 26 Short: "Show docker disk usage", 27 Args: cli.NoArgs, 28 RunE: func(cmd *cobra.Command, args []string) error { 29 return runDiskUsage(cmd.Context(), dockerCli, opts) 30 }, 31 Annotations: map[string]string{"version": "1.25"}, 32 ValidArgsFunction: completion.NoComplete, 33 } 34 35 flags := cmd.Flags() 36 37 flags.BoolVarP(&opts.verbose, "verbose", "v", false, "Show detailed information on space usage") 38 flags.StringVar(&opts.format, "format", "", flagsHelper.FormatHelp) 39 40 return cmd 41 } 42 43 func runDiskUsage(ctx context.Context, dockerCli command.Cli, opts diskUsageOptions) error { 44 // TODO expose types.DiskUsageOptions.Types as flag on the command-line and/or as separate commands (docker container df / docker container usage) 45 du, err := dockerCli.Client().DiskUsage(ctx, types.DiskUsageOptions{}) 46 if err != nil { 47 return err 48 } 49 50 format := opts.format 51 if len(format) == 0 { 52 format = formatter.TableFormatKey 53 } 54 55 var bsz int64 56 for _, bc := range du.BuildCache { 57 if !bc.Shared { 58 bsz += bc.Size 59 } 60 } 61 62 duCtx := formatter.DiskUsageContext{ 63 Context: formatter.Context{ 64 Output: dockerCli.Out(), 65 Format: formatter.NewDiskUsageFormat(format, opts.verbose), 66 }, 67 LayersSize: du.LayersSize, 68 BuilderSize: bsz, 69 BuildCache: du.BuildCache, 70 Images: du.Images, 71 Containers: du.Containers, 72 Volumes: du.Volumes, 73 Verbose: opts.verbose, 74 } 75 76 return duCtx.Write() 77 }