container_create.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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 (
  13. query url.Values
  14. response types.ContainerCreateResponse
  15. )
  16. if containerName != "" {
  17. query.Set("name", containerName)
  18. }
  19. serverResp, err := cli.POST("/containers/create", query, config, nil)
  20. if err != nil {
  21. if serverResp != nil && serverResp.statusCode == 404 && strings.Contains(err.Error(), config.Image) {
  22. return response, imageNotFoundError{config.Image}
  23. }
  24. return response, err
  25. }
  26. if serverResp.statusCode == 404 && strings.Contains(err.Error(), config.Image) {
  27. return response, imageNotFoundError{config.Image}
  28. }
  29. if err != nil {
  30. return response, err
  31. }
  32. defer ensureReaderClosed(serverResp)
  33. if err := json.NewDecoder(serverResp.body).Decode(&response); err != nil {
  34. return response, err
  35. }
  36. return response, nil
  37. }