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  }