github.com/DaoCloud/dao@v0.0.0-20161212064103-c3dbfd13ee36/api/client/container/diff.go (about) 1 package container 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/client" 9 "github.com/docker/docker/cli" 10 "github.com/docker/docker/pkg/archive" 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 *client.DockerCli) *cobra.Command { 20 var opts diffOptions 21 22 cmd := &cobra.Command{ 23 Use: "diff CONTAINER", 24 Short: "查看容器文件系统的变化差异", 25 Args: cli.ExactArgs(1), 26 RunE: func(cmd *cobra.Command, args []string) error { 27 opts.container = args[0] 28 return runDiff(dockerCli, &opts) 29 }, 30 } 31 32 return cmd 33 } 34 35 func runDiff(dockerCli *client.DockerCli, opts *diffOptions) error { 36 if opts.container == "" { 37 return fmt.Errorf("容器名称不能为空") 38 } 39 ctx := context.Background() 40 41 changes, err := dockerCli.Client().ContainerDiff(ctx, opts.container) 42 if err != nil { 43 return err 44 } 45 46 for _, change := range changes { 47 var kind string 48 switch change.Kind { 49 case archive.ChangeModify: 50 kind = "C" 51 case archive.ChangeAdd: 52 kind = "A" 53 case archive.ChangeDelete: 54 kind = "D" 55 } 56 fmt.Fprintf(dockerCli.Out(), "%s %s\n", kind, change.Path) 57 } 58 59 return nil 60 }