فهرست منبع

Fix non-tty run issue

Guillaume J. Charmes 12 سال پیش
والد
کامیت
2eaa0a1dd7
1فایلهای تغییر یافته به همراه13 افزوده شده و 5 حذف شده
  1. 13 5
      commands.go

+ 13 - 5
commands.go

@@ -1045,7 +1045,9 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
 		connections += 1
 	}
 	chErrors := make(chan error, connections)
-	cli.monitorTtySize(cmd.Arg(0))
+	if container.Config.Tty {
+		cli.monitorTtySize(cmd.Arg(0))
+	}
 	if splitStderr {
 		go func() {
 			chErrors <- cli.hijack("POST", "/containers/"+cmd.Arg(0)+"/attach?stream=1&stderr=1", false, nil, os.Stderr)
@@ -1256,7 +1258,9 @@ func (cli *DockerCli) CmdRun(args ...string) error {
 	}
 	if connections > 0 {
 		chErrors := make(chan error, connections)
-		cli.monitorTtySize(out.ID)
+		if config.Tty {
+			cli.monitorTtySize(out.ID)
+		}
 
 		if splitStderr && config.AttachStderr {
 			go func() {
@@ -1283,6 +1287,7 @@ func (cli *DockerCli) CmdRun(args ...string) error {
 		for connections > 0 {
 			err := <-chErrors
 			if err != nil {
+				utils.Debugf("Error hijack: %s", err)
 				return err
 			}
 			connections -= 1
@@ -1431,19 +1436,22 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in *os.Fi
 		defer term.RestoreTerminal(oldState)
 	}
 	sendStdin := utils.Go(func() error {
-		_, err := io.Copy(rwc, in)
+		io.Copy(rwc, in)
 		if err := rwc.(*net.TCPConn).CloseWrite(); err != nil {
-			fmt.Fprintf(os.Stderr, "Couldn't send EOF: %s\n", err)
+			utils.Debugf("Couldn't send EOF: %s\n", err)
 		}
-		return err
+		// Discard errors due to pipe interruption
+		return nil
 	})
 
 	if err := <-receiveStdout; err != nil {
+		utils.Debugf("Error receiveStdout: %s", err)
 		return err
 	}
 
 	if !term.IsTerminal(in.Fd()) {
 		if err := <-sendStdin; err != nil {
+			utils.Debugf("Error sendStdin: %s", err)
 			return err
 		}
 	}