image_inspect.go 914 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package lib
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io/ioutil"
  6. "net/http"
  7. "net/url"
  8. "github.com/docker/docker/api/types"
  9. )
  10. // ImageInspectWithRaw returns the image information and it's raw representation.
  11. func (cli *Client) ImageInspectWithRaw(imageID string, getSize bool) (types.ImageInspect, []byte, error) {
  12. query := url.Values{}
  13. if getSize {
  14. query.Set("size", "1")
  15. }
  16. serverResp, err := cli.get("/images/"+imageID+"/json", query, nil)
  17. if err != nil {
  18. if serverResp.statusCode == http.StatusNotFound {
  19. return types.ImageInspect{}, nil, imageNotFoundError{imageID}
  20. }
  21. return types.ImageInspect{}, nil, err
  22. }
  23. defer ensureReaderClosed(serverResp)
  24. body, err := ioutil.ReadAll(serverResp.body)
  25. if err != nil {
  26. return types.ImageInspect{}, nil, err
  27. }
  28. var response types.ImageInspect
  29. rdr := bytes.NewReader(body)
  30. err = json.NewDecoder(rdr).Decode(&response)
  31. return response, body, err
  32. }