parse_unix.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // +build !windows
  2. package runconfig
  3. import (
  4. "fmt"
  5. "strings"
  6. )
  7. func parseNetMode(netMode string) (NetworkMode, error) {
  8. parts := strings.Split(netMode, ":")
  9. switch mode := parts[0]; mode {
  10. case "default", "bridge", "none", "host":
  11. case "container":
  12. if len(parts) < 2 || parts[1] == "" {
  13. return "", fmt.Errorf("invalid container format container:<name|id>")
  14. }
  15. default:
  16. return "", fmt.Errorf("invalid --net: %s", netMode)
  17. }
  18. return NetworkMode(netMode), nil
  19. }
  20. func validateNetMode(vals *validateNM) error {
  21. if (vals.netMode.IsHost() || vals.netMode.IsContainer()) && *vals.flHostname != "" {
  22. return ErrConflictNetworkHostname
  23. }
  24. if vals.netMode.IsHost() && vals.flLinks.Len() > 0 {
  25. return ErrConflictHostNetworkAndLinks
  26. }
  27. if vals.netMode.IsContainer() && vals.flLinks.Len() > 0 {
  28. return ErrConflictContainerNetworkAndLinks
  29. }
  30. if (vals.netMode.IsHost() || vals.netMode.IsContainer()) && vals.flDNS.Len() > 0 {
  31. return ErrConflictNetworkAndDNS
  32. }
  33. if (vals.netMode.IsContainer() || vals.netMode.IsHost()) && vals.flExtraHosts.Len() > 0 {
  34. return ErrConflictNetworkHosts
  35. }
  36. if (vals.netMode.IsContainer() || vals.netMode.IsHost()) && *vals.flMacAddress != "" {
  37. return ErrConflictContainerNetworkAndMac
  38. }
  39. if vals.netMode.IsContainer() && (vals.flPublish.Len() > 0 || *vals.flPublishAll == true) {
  40. return ErrConflictNetworkPublishPorts
  41. }
  42. if vals.netMode.IsContainer() && vals.flExpose.Len() > 0 {
  43. return ErrConflictNetworkExposePorts
  44. }
  45. return nil
  46. }