github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/cli/command/image/list.go (about) 1 package image 2 3 import ( 4 "golang.org/x/net/context" 5 6 "github.com/docker/docker/api/types" 7 "github.com/docker/docker/cli" 8 "github.com/docker/docker/cli/command" 9 "github.com/docker/docker/cli/command/formatter" 10 "github.com/docker/docker/opts" 11 "github.com/spf13/cobra" 12 ) 13 14 type imagesOptions struct { 15 matchName string 16 17 quiet bool 18 all bool 19 noTrunc bool 20 showDigests bool 21 format string 22 filter opts.FilterOpt 23 } 24 25 // NewImagesCommand creates a new `docker images` command 26 func NewImagesCommand(dockerCli *command.DockerCli) *cobra.Command { 27 opts := imagesOptions{filter: opts.NewFilterOpt()} 28 29 cmd := &cobra.Command{ 30 Use: "images [OPTIONS] [REPOSITORY[:TAG]]", 31 Short: "List images", 32 Args: cli.RequiresMaxArgs(1), 33 RunE: func(cmd *cobra.Command, args []string) error { 34 if len(args) > 0 { 35 opts.matchName = args[0] 36 } 37 return runImages(dockerCli, opts) 38 }, 39 } 40 41 flags := cmd.Flags() 42 43 flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only show numeric IDs") 44 flags.BoolVarP(&opts.all, "all", "a", false, "Show all images (default hides intermediate images)") 45 flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Don't truncate output") 46 flags.BoolVar(&opts.showDigests, "digests", false, "Show digests") 47 flags.StringVar(&opts.format, "format", "", "Pretty-print images using a Go template") 48 flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") 49 50 return cmd 51 } 52 53 func newListCommand(dockerCli *command.DockerCli) *cobra.Command { 54 cmd := *NewImagesCommand(dockerCli) 55 cmd.Aliases = []string{"images", "list"} 56 cmd.Use = "ls [OPTIONS] [REPOSITORY[:TAG]]" 57 return &cmd 58 } 59 60 func runImages(dockerCli *command.DockerCli, opts imagesOptions) error { 61 ctx := context.Background() 62 63 options := types.ImageListOptions{ 64 MatchName: opts.matchName, 65 All: opts.all, 66 Filters: opts.filter.Value(), 67 } 68 69 images, err := dockerCli.Client().ImageList(ctx, options) 70 if err != nil { 71 return err 72 } 73 74 format := opts.format 75 if len(format) == 0 { 76 if len(dockerCli.ConfigFile().ImagesFormat) > 0 && !opts.quiet { 77 format = dockerCli.ConfigFile().ImagesFormat 78 } else { 79 format = formatter.TableFormatKey 80 } 81 } 82 83 imageCtx := formatter.ImageContext{ 84 Context: formatter.Context{ 85 Output: dockerCli.Out(), 86 Format: formatter.NewImageFormat(format, opts.quiet, opts.showDigests), 87 Trunc: !opts.noTrunc, 88 }, 89 Digest: opts.showDigests, 90 } 91 return formatter.ImageWrite(imageCtx, images) 92 }