github.com/walkingsparrow/docker@v1.4.2-0.20151218153551-b708a2249bfa/api/client/lib/container_create.go (about) 1 package lib 2 3 import ( 4 "encoding/json" 5 "net/url" 6 "strings" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/runconfig" 10 ) 11 12 // ContainerCreate creates a new container based in the given configuration. 13 // It can be associated with a name, but it's not mandatory. 14 func (cli *Client) ContainerCreate(config *runconfig.ContainerConfigWrapper, containerName string) (types.ContainerCreateResponse, error) { 15 var response types.ContainerCreateResponse 16 query := url.Values{} 17 if containerName != "" { 18 query.Set("name", containerName) 19 } 20 21 serverResp, err := cli.post("/containers/create", query, config, nil) 22 if err != nil { 23 if serverResp != nil && serverResp.statusCode == 404 && strings.Contains(err.Error(), config.Image) { 24 return response, imageNotFoundError{config.Image} 25 } 26 return response, err 27 } 28 29 if serverResp.statusCode == 404 && strings.Contains(err.Error(), config.Image) { 30 return response, imageNotFoundError{config.Image} 31 } 32 33 if err != nil { 34 return response, err 35 } 36 defer ensureReaderClosed(serverResp) 37 38 if err := json.NewDecoder(serverResp.body).Decode(&response); err != nil { 39 return response, err 40 } 41 42 return response, nil 43 }