container_list.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package client // import "github.com/docker/docker/client"
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/url"
  6. "strconv"
  7. "github.com/docker/docker/api/types"
  8. "github.com/docker/docker/api/types/container"
  9. "github.com/docker/docker/api/types/filters"
  10. )
  11. // ContainerList returns the list of containers in the docker host.
  12. func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error) {
  13. query := url.Values{}
  14. if options.All {
  15. query.Set("all", "1")
  16. }
  17. if options.Limit > 0 {
  18. query.Set("limit", strconv.Itoa(options.Limit))
  19. }
  20. if options.Since != "" {
  21. query.Set("since", options.Since)
  22. }
  23. if options.Before != "" {
  24. query.Set("before", options.Before)
  25. }
  26. if options.Size {
  27. query.Set("size", "1")
  28. }
  29. if options.Filters.Len() > 0 {
  30. //nolint:staticcheck // ignore SA1019 for old code
  31. filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)
  32. if err != nil {
  33. return nil, err
  34. }
  35. query.Set("filters", filterJSON)
  36. }
  37. resp, err := cli.get(ctx, "/containers/json", query, nil)
  38. defer ensureReaderClosed(resp)
  39. if err != nil {
  40. return nil, err
  41. }
  42. var containers []types.Container
  43. err = json.NewDecoder(resp.body).Decode(&containers)
  44. return containers, err
  45. }