opts.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package run
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "github.com/docker/api/containers"
  7. )
  8. type runOpts struct {
  9. name string
  10. publish []string
  11. volumes []string
  12. }
  13. func toPorts(ports []string) ([]containers.Port, error) {
  14. var result []containers.Port
  15. for _, port := range ports {
  16. parts := strings.Split(port, ":")
  17. if len(parts) != 2 {
  18. return nil, fmt.Errorf("unable to parse ports %q", port)
  19. }
  20. source, err := strconv.Atoi(parts[0])
  21. if err != nil {
  22. return nil, err
  23. }
  24. destination, err := strconv.Atoi(parts[1])
  25. if err != nil {
  26. return nil, err
  27. }
  28. result = append(result, containers.Port{
  29. HostPort: uint32(source),
  30. ContainerPort: uint32(destination),
  31. })
  32. }
  33. return result, nil
  34. }
  35. func (r *runOpts) toContainerConfig(image string) (containers.ContainerConfig, error) {
  36. publish, err := toPorts(r.publish)
  37. if err != nil {
  38. return containers.ContainerConfig{}, err
  39. }
  40. return containers.ContainerConfig{
  41. ID: r.name,
  42. Image: image,
  43. Ports: publish,
  44. Volumes: r.volumes,
  45. }, nil
  46. }