Преглед на файлове

Fix bug in attach handling for docker exec. Add docs for 'docker exec' feature.

Docker-DCO-1.1-Signed-off-by: Vishnu Kannan <vishnuk@google.com> (github: vishh)
Vishnu Kannan преди 11 години
родител
ревизия
d130c10ab7
променени са 2 файла, в които са добавени 36 реда и са изтрити 7 реда
  1. 7 7
      daemon/exec.go
  2. 29 0
      docs/man/docker-exec.md

+ 7 - 7
daemon/exec.go

@@ -87,22 +87,22 @@ func (d *Daemon) ContainerExec(job *engine.Job) engine.Status {
 		execConfig.StreamConfig.stdinPipe = ioutils.NopWriteCloser(ioutil.Discard) // Silently drop stdin
 	}
 
-	var execErr, attachErr chan error
-	go func() {
-		attachErr = d.Attach(&execConfig.StreamConfig, config.AttachStdin, false, config.Tty, cStdin, cStdinCloser, cStdout, cStderr)
-	}()
+	attachErr := d.Attach(&execConfig.StreamConfig, config.AttachStdin, false, config.Tty, cStdin, cStdinCloser, cStdout, cStderr)
 
+	execErr := make(chan error)
 	go func() {
 		err := container.Exec(execConfig)
 		if err != nil {
-			err = fmt.Errorf("Cannot run in container %s: %s", name, err)
+			execErr <- fmt.Errorf("Cannot run in container %s: %s", name, err)
 		}
-		execErr <- err
 	}()
 
 	select {
 	case err := <-attachErr:
-		return job.Errorf("attach failed with error: %s", err)
+		if err != nil {
+			return job.Errorf("attach failed with error: %s", err)
+		}
+		break
 	case err := <-execErr:
 		return job.Error(err)
 	}

+ 29 - 0
docs/man/docker-exec.md

@@ -0,0 +1,29 @@
+% DOCKER(1) Docker User Manuals
+% Docker Community
+% SEPT 2014
+# NAME
+docker-exec - Run a command in an existing container
+
+# SYNOPSIS
+**docker exec**
+[**-d**|**--detach**[=*false*]]
+[**-i**|**--interactive**[=*false*]]
+[**-t**|**--tty**[=*false*]]
+ CONTAINER COMMAND [ARG...]
+
+# DESCRIPTION
+
+Run a process in an existing container. The existing CONTAINER needs is active.
+
+# Options
+
+**-d**, **--detach**=*true*|*false*
+   Detached mode. This runs the new process in the background.
+
+**-i**, **--interactive**=*true*|*false*
+   When set to true, keep stdin open even if not attached. The default is false.
+
+**-t**, **--tty**=*true*|*false*
+   When set to true Docker can allocate a pseudo-tty and attach to the standard
+input of the process. This can be used, for example, to run a throwaway
+interactive shell. The default is value is false.