diff --git a/api/client/exec.go b/api/client/exec.go index 42cdf2fed3..a9c836c943 100644 --- a/api/client/exec.go +++ b/api/client/exec.go @@ -92,7 +92,7 @@ func (cli *DockerCli) CmdExec(args ...string) error { } } errCh = promise.Go(func() error { - return cli.hijack("POST", "/exec/"+execID+"/start", execConfig.Tty, in, out, stderr, hijacked, execConfig) + return cli.hijackWithContentType("POST", "/exec/"+execID+"/start", "application/json", execConfig.Tty, in, out, stderr, hijacked, execConfig) }) // Acknowledge the hijack before starting diff --git a/api/client/hijack.go b/api/client/hijack.go index ae09ad0f3c..5b8a23c7ac 100644 --- a/api/client/hijack.go +++ b/api/client/hijack.go @@ -127,6 +127,10 @@ func (cli *DockerCli) dial() (net.Conn, error) { } func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error { + return cli.hijackWithContentType(method, path, "text/plain", setRawTerminal, in, stdout, stderr, started, data) +} + +func (cli *DockerCli) hijackWithContentType(method, path, contentType string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error { defer func() { if started != nil { close(started) @@ -149,7 +153,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea } req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION+" ("+runtime.GOOS+")") - req.Header.Set("Content-Type", "text/plain") + req.Header.Set("Content-Type", contentType) req.Header.Set("Connection", "Upgrade") req.Header.Set("Upgrade", "tcp") req.Host = cli.addr diff --git a/api/server/router/local/exec.go b/api/server/router/local/exec.go index 7d3c883e19..90e9e7c8bd 100644 --- a/api/server/router/local/exec.go +++ b/api/server/router/local/exec.go @@ -60,6 +60,9 @@ func (s *router) postContainerExecStart(ctx context.Context, w http.ResponseWrit if err := httputils.ParseForm(r); err != nil { return err } + if err := httputils.CheckForJSON(r); err != nil { + return err + } var ( execName = vars["name"] stdin, inStream io.ReadCloser