container_create.go 1.1 KB

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