image_list.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package client
  2. import (
  3. "encoding/json"
  4. "net/url"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/api/types/filters"
  7. "github.com/docker/docker/api/types/versions"
  8. "golang.org/x/net/context"
  9. )
  10. // ImageList returns a list of images in the docker host.
  11. func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions) ([]types.ImageSummary, error) {
  12. var images []types.ImageSummary
  13. query := url.Values{}
  14. optionFilters := options.Filters
  15. referenceFilters := optionFilters.Get("reference")
  16. if versions.LessThan(cli.version, "1.25") && len(referenceFilters) > 0 {
  17. query.Set("filter", referenceFilters[0])
  18. for _, filterValue := range referenceFilters {
  19. optionFilters.Del("reference", filterValue)
  20. }
  21. }
  22. if optionFilters.Len() > 0 {
  23. filterJSON, err := filters.ToParamWithVersion(cli.version, optionFilters)
  24. if err != nil {
  25. return images, err
  26. }
  27. query.Set("filters", filterJSON)
  28. }
  29. if options.All {
  30. query.Set("all", "1")
  31. }
  32. serverResp, err := cli.get(ctx, "/images/json", query, nil)
  33. if err != nil {
  34. return images, err
  35. }
  36. err = json.NewDecoder(serverResp.body).Decode(&images)
  37. ensureReaderClosed(serverResp)
  38. return images, err
  39. }