image_list.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package client // import "github.com/docker/docker/client"
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/url"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/filters"
  8. "github.com/docker/docker/api/types/versions"
  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. //nolint:staticcheck // ignore SA1019 for old code
  24. filterJSON, err := filters.ToParamWithVersion(cli.version, optionFilters)
  25. if err != nil {
  26. return images, err
  27. }
  28. query.Set("filters", filterJSON)
  29. }
  30. if options.All {
  31. query.Set("all", "1")
  32. }
  33. if options.SharedSize && versions.GreaterThanOrEqualTo(cli.version, "1.42") {
  34. query.Set("shared-size", "1")
  35. }
  36. serverResp, err := cli.get(ctx, "/images/json", query, nil)
  37. defer ensureReaderClosed(serverResp)
  38. if err != nil {
  39. return images, err
  40. }
  41. err = json.NewDecoder(serverResp.body).Decode(&images)
  42. return images, err
  43. }