diff --git a/daemon/exec_windows.go b/daemon/exec_windows.go index be25d20007..a6ac1db42d 100644 --- a/daemon/exec_windows.go +++ b/daemon/exec_windows.go @@ -8,7 +8,6 @@ import ( func execSetPlatformOpt(c *container.Container, ec *exec.Config, p *libcontainerd.Process) error { // Process arguments need to be escaped before sending to OCI. - // TODO (jstarks): escape the entrypoint too once the tests are fixed to not rely on this behavior - p.Args = append([]string{p.Args[0]}, escapeArgs(p.Args[1:])...) + p.Args = escapeArgs(p.Args) return nil } diff --git a/daemon/oci_windows.go b/daemon/oci_windows.go index 5bf3f82418..06eb7f5b4d 100644 --- a/daemon/oci_windows.go +++ b/daemon/oci_windows.go @@ -63,11 +63,9 @@ func (daemon *Daemon) createSpec(c *container.Container) (*libcontainerd.Spec, e } // In s.Process - if c.Config.ArgsEscaped { - s.Process.Args = append([]string{c.Path}, c.Args...) - } else { - // TODO (jstarks): escape the entrypoint too once the tests are fixed to not rely on this behavior - s.Process.Args = append([]string{c.Path}, escapeArgs(c.Args)...) + s.Process.Args = append([]string{c.Path}, c.Args...) + if !c.Config.ArgsEscaped { + s.Process.Args = escapeArgs(s.Process.Args) } s.Process.Cwd = c.Config.WorkingDir s.Process.Env = c.CreateDaemonEnvironment(linkedEnv) diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index c19603d964..620d029935 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -331,7 +331,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { // Create a file in a volume if daemonPlatform == "windows" { - out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", `c:\some\dir`, WindowsBaseImage, `cmd /c echo hello > c:\some\dir\file`) + out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", `c:\some\dir`, WindowsBaseImage, "cmd", "/c", `echo hello > c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", "/some/dir", "busybox", "touch", "/some/dir/file") } @@ -341,7 +341,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { // Read the file from another container using --volumes-from to access the volume in the second container if daemonPlatform == "windows" { - out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", WindowsBaseImage, `cmd /c type c:\some\dir\file`) + out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", WindowsBaseImage, "cmd", "/c", `type c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", "busybox", "cat", "/some/dir/file") } @@ -1901,15 +1901,8 @@ func (s *DockerSuite) TestRunWithBadDevice(c *check.C) { func (s *DockerSuite) TestRunEntrypoint(c *check.C) { name := "entrypoint" - // Note Windows does not have an echo.exe built in. - var out, expected string - if daemonPlatform == "windows" { - out, _ = dockerCmd(c, "run", "--name", name, "--entrypoint", "cmd /s /c echo", "busybox", "foobar") - expected = "foobar\r\n" - } else { - out, _ = dockerCmd(c, "run", "--name", name, "--entrypoint", "/bin/echo", "busybox", "-n", "foobar") - expected = "foobar" - } + out, _ := dockerCmd(c, "run", "--name", name, "--entrypoint", "echo", "busybox", "-n", "foobar") + expected := "foobar" if out != expected { c.Fatalf("Output should be %q, actual out: %q", expected, out) @@ -2623,18 +2616,17 @@ func (s *DockerSuite) TestRunTTYWithPipe(c *check.C) { func (s *DockerSuite) TestRunNonLocalMacAddress(c *check.C) { addr := "00:16:3E:08:00:50" - cmd := "ifconfig" - image := "busybox" + args := []string{"run", "--mac-address", addr} expected := addr - if daemonPlatform == "windows" { - cmd = "ipconfig /all" - image = WindowsBaseImage + if daemonPlatform != "windows" { + args = append(args, "busybox", "ifconfig") + } else { + args = append(args, WindowsBaseImage, "ipconfig", "/all") expected = strings.Replace(strings.ToUpper(addr), ":", "-", -1) - } - if out, _ := dockerCmd(c, "run", "--mac-address", addr, image, cmd); !strings.Contains(out, expected) { + if out, _ := dockerCmd(c, args...); !strings.Contains(out, expected) { c.Fatalf("Output should have contained %q: %s", expected, out) } }