浏览代码

Extract port-mapping validation to a function

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 6 年之前
父节点
当前提交
c0697c27aa
共有 1 个文件被更改,包括 18 次插入12 次删除
  1. 18 12
      daemon/container.go

+ 18 - 12
daemon/container.go

@@ -295,19 +295,9 @@ func (daemon *Daemon) verifyContainerSettings(platform string, hostConfig *conta
 		}
 		}
 	}
 	}
 
 
-	for port := range hostConfig.PortBindings {
-		_, portStr := nat.SplitProtoPort(string(port))
-		if _, err := nat.ParsePort(portStr); err != nil {
-			return nil, errors.Errorf("invalid port specification: %q", portStr)
-		}
-		for _, pb := range hostConfig.PortBindings[port] {
-			_, err := nat.NewPort(nat.SplitProtoPort(pb.HostPort))
-			if err != nil {
-				return nil, errors.Errorf("invalid port specification: %q", pb.HostPort)
-			}
-		}
+	if err := validatePortBindings(hostConfig.PortBindings); err != nil {
+		return nil, err
 	}
 	}
-
 	if err := validateRestartPolicy(hostConfig.RestartPolicy); err != nil {
 	if err := validateRestartPolicy(hostConfig.RestartPolicy); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
@@ -343,6 +333,22 @@ func validateHealthCheck(healthConfig *containertypes.HealthConfig) error {
 	return nil
 	return nil
 }
 }
 
 
+func validatePortBindings(ports nat.PortMap) error {
+	for port := range ports {
+		_, portStr := nat.SplitProtoPort(string(port))
+		if _, err := nat.ParsePort(portStr); err != nil {
+			return errors.Errorf("invalid port specification: %q", portStr)
+		}
+		for _, pb := range ports[port] {
+			_, err := nat.NewPort(nat.SplitProtoPort(pb.HostPort))
+			if err != nil {
+				return errors.Errorf("invalid port specification: %q", pb.HostPort)
+			}
+		}
+	}
+	return nil
+}
+
 func validateRestartPolicy(policy containertypes.RestartPolicy) error {
 func validateRestartPolicy(policy containertypes.RestartPolicy) error {
 	switch policy.Name {
 	switch policy.Name {
 	case "always", "unless-stopped", "no":
 	case "always", "unless-stopped", "no":