github.com/walkingsparrow/docker@v1.4.2-0.20151218153551-b708a2249bfa/api/client/lib/image_inspect.go (about)

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