Просмотр исходного кода

Windows to Linux build warning to stdout

Signed-off-by: John Howard <jhoward@microsoft.com>

When building a Dockerfile from a Windows client on a Linux daemon, a
"security warning" is printed
on stderr. Having this warning printed on stderr makes it difficult to
distinguish a failed build from one that's succeeding, and the only way to
suppress the warning is through the -q option, which also suppresses every
output. This change prints the warning on stdout, instead of stderr, to
resolve this situation.
John Howard 8 лет назад
Родитель
Сommit
d45c652e83
2 измененных файлов с 10 добавлено и 13 удалено
  1. 1 1
      cli/command/image/build.go
  2. 9 12
      integration-cli/docker_cli_build_test.go

+ 1 - 1
cli/command/image/build.go

@@ -334,7 +334,7 @@ func runBuild(dockerCli *command.DockerCli, options buildOptions) error {
 	// Windows: show error message about modified file permissions if the
 	// Windows: show error message about modified file permissions if the
 	// daemon isn't running Windows.
 	// daemon isn't running Windows.
 	if response.OSType != "windows" && runtime.GOOS == "windows" && !options.quiet {
 	if response.OSType != "windows" && runtime.GOOS == "windows" && !options.quiet {
-		fmt.Fprintln(dockerCli.Err(), `SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.`)
+		fmt.Fprintln(dockerCli.Out(), `SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.`)
 	}
 	}
 
 
 	// Everything worked so if -q was provided the output from the daemon
 	// Everything worked so if -q was provided the output from the daemon

+ 9 - 12
integration-cli/docker_cli_build_test.go

@@ -4644,23 +4644,20 @@ func (s *DockerSuite) TestBuildStderr(c *check.C) {
 	// This test just makes sure that no non-error output goes
 	// This test just makes sure that no non-error output goes
 	// to stderr
 	// to stderr
 	name := "testbuildstderr"
 	name := "testbuildstderr"
-	_, _, stderr, err := buildImageWithStdoutStderr(name,
+	_, stdout, stderr, err := buildImageWithStdoutStderr(name,
 		"FROM busybox\nRUN echo one", true)
 		"FROM busybox\nRUN echo one", true)
 	if err != nil {
 	if err != nil {
 		c.Fatal(err)
 		c.Fatal(err)
 	}
 	}
 
 
-	if runtime.GOOS == "windows" &&
-		daemonPlatform != "windows" {
-		// Windows to non-Windows should have a security warning
-		if !strings.Contains(stderr, "SECURITY WARNING:") {
-			c.Fatalf("Stderr contains unexpected output: %q", stderr)
-		}
-	} else {
-		// Other platform combinations should have no stderr written too
-		if stderr != "" {
-			c.Fatalf("Stderr should have been empty, instead it's: %q", stderr)
-		}
+	// Windows to non-Windows should have a security warning
+	if runtime.GOOS == "windows" && daemonPlatform != "windows" && !strings.Contains(stdout, "SECURITY WARNING:") {
+		c.Fatalf("Stdout contains unexpected output: %q", stdout)
+	}
+
+	// Stderr should always be empty
+	if stderr != "" {
+		c.Fatalf("Stderr should have been empty, instead it's: %q", stderr)
 	}
 	}
 }
 }