github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/container/diff.go (about) 1 package container 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 "github.com/pkg/errors" 11 "github.com/spf13/cobra" 12 ) 13 14 type diffOptions struct { 15 container string 16 } 17 18 // NewDiffCommand creates a new cobra.Command for `docker diff` 19 func NewDiffCommand(dockerCli command.Cli) *cobra.Command { 20 var opts diffOptions 21 22 return &cobra.Command{ 23 Use: "diff CONTAINER", 24 Short: "Inspect changes to files or directories on a container's filesystem", 25 Args: cli.ExactArgs(1), 26 RunE: func(cmd *cobra.Command, args []string) error { 27 opts.container = args[0] 28 return runDiff(cmd.Context(), dockerCli, &opts) 29 }, 30 Annotations: map[string]string{ 31 "aliases": "docker container diff, docker diff", 32 }, 33 ValidArgsFunction: completion.ContainerNames(dockerCli, false), 34 } 35 } 36 37 func runDiff(ctx context.Context, dockerCli command.Cli, opts *diffOptions) error { 38 if opts.container == "" { 39 return errors.New("Container name cannot be empty") 40 } 41 changes, err := dockerCli.Client().ContainerDiff(ctx, opts.container) 42 if err != nil { 43 return err 44 } 45 diffCtx := formatter.Context{ 46 Output: dockerCli.Out(), 47 Format: NewDiffFormat("{{.Type}} {{.Path}}"), 48 } 49 return DiffFormatWrite(diffCtx, changes) 50 }