Fix regressions in attach

* Wrong bool parsing
* Attach always all streams

Were introduced in #12120

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Upstream-commit: 0fec3e19dbff15b3cd8fa3693f694e34d8dcc5a9
Component: engine
This commit is contained in:
Alexander Morozov
2015-04-09 09:58:44 -07:00
parent c900c31960
commit ea52df6141
2 changed files with 25 additions and 10 deletions
+16 -3
View File
@@ -1011,10 +1011,23 @@ func postContainersAttach(eng *engine.Engine, version version.Version, w http.Re
} else {
errStream = outStream
}
logs := r.Form.Get("logs") != ""
stream := r.Form.Get("stream") != ""
logs := toBool(r.Form.Get("logs"))
stream := toBool(r.Form.Get("stream"))
if err := cont.AttachWithLogs(inStream, outStream, errStream, logs, stream); err != nil {
var stdin io.ReadCloser
var stdout, stderr io.Writer
if toBool(r.Form.Get("stdin")) {
stdin = inStream
}
if toBool(r.Form.Get("stdout")) {
stdout = outStream
}
if toBool(r.Form.Get("stderr")) {
stderr = errStream
}
if err := cont.AttachWithLogs(stdin, stdout, stderr, logs, stream); err != nil {
fmt.Fprintf(outStream, "Error attaching: %s\n", err)
}
return nil
+9 -7
View File
@@ -61,13 +61,15 @@ func (c *Container) AttachWithLogs(stdin io.ReadCloser, stdout, stderr io.Writer
//stream
if stream {
var stdinPipe io.ReadCloser
r, w := io.Pipe()
go func() {
defer w.Close()
defer logrus.Debugf("Closing buffered stdin pipe")
io.Copy(w, stdin)
}()
stdinPipe = r
if stdin != nil {
r, w := io.Pipe()
go func() {
defer w.Close()
defer logrus.Debugf("Closing buffered stdin pipe")
io.Copy(w, stdin)
}()
stdinPipe = r
}
<-c.Attach(stdinPipe, stdout, stderr)
// If we are in stdinonce mode, wait for the process to end
// otherwise, simply return