浏览代码

Make sure to set error reguardless of attach or stdin

Fixes #3364
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Michael Crosby 11 年之前
父节点
当前提交
51d9a04f17
共有 2 个文件被更改,包括 35 次插入1 次删除
  1. 1 1
      api/client/commands.go
  2. 34 0
      integration-cli/docker_cli_start_test.go

+ 1 - 1
api/client/commands.go

@@ -607,8 +607,8 @@ func (cli *DockerCli) CmdStart(args ...string) error {
 		if err != nil {
 			if !*attach || !*openStdin {
 				fmt.Fprintf(cli.err, "%s\n", err)
-				encounteredError = fmt.Errorf("Error: failed to start one or more containers")
 			}
+			encounteredError = fmt.Errorf("Error: failed to start one or more containers")
 		} else {
 			if !*attach || !*openStdin {
 				fmt.Fprintf(cli.out, "%s\n", name)

+ 34 - 0
integration-cli/docker_cli_start_test.go

@@ -0,0 +1,34 @@
+package main
+
+import (
+	"os/exec"
+	"testing"
+)
+
+// Regression test for #3364
+func TestDockerStartWithPortCollision(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "--name", "fail", "-p", "25:25", "busybox", "true")
+	out, stderr, exitCode, err := runCommandWithStdoutStderr(runCmd)
+	if err != nil && exitCode != 0 {
+		t.Fatal(out, stderr, err)
+	}
+
+	runCmd = exec.Command(dockerBinary, "run", "--name", "conflict", "-dti", "-p", "25:25", "busybox", "sh")
+	out, stderr, exitCode, err = runCommandWithStdoutStderr(runCmd)
+	if err != nil && exitCode != 0 {
+		t.Fatal(out, stderr, err)
+	}
+
+	startCmd := exec.Command(dockerBinary, "start", "-a", "fail")
+	out, stderr, exitCode, err = runCommandWithStdoutStderr(startCmd)
+	if err != nil && exitCode != 1 {
+		t.Fatal(out, err)
+	}
+
+	killCmd := exec.Command(dockerBinary, "kill", "conflict")
+	runCommand(killCmd)
+
+	deleteAllContainers()
+
+	logDone("start - -a=true error on port use")
+}