container_inspect.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. // ContainerInspect returns the container information.
  11. func (cli *Client) ContainerInspect(containerID string) (types.ContainerJSON, error) {
  12. serverResp, err := cli.get("/containers/"+containerID+"/json", nil, nil)
  13. if err != nil {
  14. if serverResp.statusCode == http.StatusNotFound {
  15. return types.ContainerJSON{}, containerNotFoundError{containerID}
  16. }
  17. return types.ContainerJSON{}, err
  18. }
  19. defer ensureReaderClosed(serverResp)
  20. var response types.ContainerJSON
  21. err = json.NewDecoder(serverResp.body).Decode(&response)
  22. return response, err
  23. }
  24. // ContainerInspectWithRaw returns the container information and it's raw representation.
  25. func (cli *Client) ContainerInspectWithRaw(containerID string, getSize bool) (types.ContainerJSON, []byte, error) {
  26. query := url.Values{}
  27. if getSize {
  28. query.Set("size", "1")
  29. }
  30. serverResp, err := cli.get("/containers/"+containerID+"/json", query, nil)
  31. if err != nil {
  32. if serverResp.statusCode == http.StatusNotFound {
  33. return types.ContainerJSON{}, nil, containerNotFoundError{containerID}
  34. }
  35. return types.ContainerJSON{}, nil, err
  36. }
  37. defer ensureReaderClosed(serverResp)
  38. body, err := ioutil.ReadAll(serverResp.body)
  39. if err != nil {
  40. return types.ContainerJSON{}, nil, err
  41. }
  42. var response types.ContainerJSON
  43. rdr := bytes.NewReader(body)
  44. err = json.NewDecoder(rdr).Decode(&response)
  45. return response, body, err
  46. }
  47. func (cli *Client) containerInspectWithResponse(containerID string, query url.Values) (types.ContainerJSON, *serverResponse, error) {
  48. serverResp, err := cli.get("/containers/"+containerID+"/json", nil, nil)
  49. if err != nil {
  50. return types.ContainerJSON{}, serverResp, err
  51. }
  52. var response types.ContainerJSON
  53. err = json.NewDecoder(serverResp.body).Decode(&response)
  54. return response, serverResp, err
  55. }