瀏覽代碼

Merge pull request #10856 from coolljt0725/fix_expose

Fix docker run --expose with an invalid port does not error out
Jessie Frazelle 10 年之前
父節點
當前提交
1402937347
共有 2 個文件被更改,包括 23 次插入15 次删除
  1. 14 0
      integration-cli/docker_cli_run_test.go
  2. 9 15
      runconfig/parse.go

+ 14 - 0
integration-cli/docker_cli_run_test.go

@@ -2719,6 +2719,20 @@ func TestRunAllowPortRangeThroughExpose(t *testing.T) {
 	logDone("run - allow port range through --expose flag")
 }
 
+// test docker run expose a invalid port
+func TestRunExposePort(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "--expose", "80000", "busybox")
+	out, _, err := runCommandWithOutput(runCmd)
+	//expose a invalid port should with a error out
+	if err == nil || !strings.Contains(out, "Invalid range format for --expose") {
+		t.Fatalf("run --expose a invalid port should with error out")
+	}
+
+	deleteAllContainers()
+
+	logDone("run - can't expose a invalid port")
+}
+
 func TestRunUnknownCommand(t *testing.T) {
 	defer deleteAllContainers()
 	runCmd := exec.Command(dockerBinary, "create", "busybox", "/bin/nada")

+ 9 - 15
runconfig/parse.go

@@ -206,21 +206,15 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
 			return nil, nil, cmd, fmt.Errorf("Invalid port format for --expose: %s", e)
 		}
 		//support two formats for expose, original format <portnum>/[<proto>] or <startport-endport>/[<proto>]
-		if strings.Contains(e, "-") {
-			proto, port := nat.SplitProtoPort(e)
-			//parse the start and end port and create a sequence of ports to expose
-			start, end, err := parsers.ParsePortRange(port)
-			if err != nil {
-				return nil, nil, cmd, fmt.Errorf("Invalid range format for --expose: %s, error: %s", e, err)
-			}
-			for i := start; i <= end; i++ {
-				p := nat.NewPort(proto, strconv.FormatUint(i, 10))
-				if _, exists := ports[p]; !exists {
-					ports[p] = struct{}{}
-				}
-			}
-		} else {
-			p := nat.NewPort(nat.SplitProtoPort(e))
+		proto, port := nat.SplitProtoPort(e)
+		//parse the start and end port and create a sequence of ports to expose
+		//if expose a port, the start and end port are the same
+		start, end, err := parsers.ParsePortRange(port)
+		if err != nil {
+			return nil, nil, cmd, fmt.Errorf("Invalid range format for --expose: %s, error: %s", e, err)
+		}
+		for i := start; i <= end; i++ {
+			p := nat.NewPort(proto, strconv.FormatUint(i, 10))
 			if _, exists := ports[p]; !exists {
 				ports[p] = struct{}{}
 			}