mirror of
https://github.com/clearlinux/docker.git
synced 2026-08-26 09:36:04 +00:00
Merge pull request #8871 from tonistiigi/start-wait-hijack
Wait for hijack on docker start command
This commit is contained in:
+19
-1
@@ -627,6 +627,8 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
hijacked := make(chan io.Closer)
|
||||
|
||||
if *attach || *openStdin {
|
||||
if cmd.NArg() > 1 {
|
||||
return fmt.Errorf("You cannot start and attach multiple containers at once.")
|
||||
@@ -663,8 +665,24 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
||||
v.Set("stderr", "1")
|
||||
|
||||
cErr = promise.Go(func() error {
|
||||
return cli.hijack("POST", "/containers/"+cmd.Arg(0)+"/attach?"+v.Encode(), tty, in, cli.out, cli.err, nil, nil)
|
||||
return cli.hijack("POST", "/containers/"+cmd.Arg(0)+"/attach?"+v.Encode(), tty, in, cli.out, cli.err, hijacked, nil)
|
||||
})
|
||||
} else {
|
||||
close(hijacked)
|
||||
}
|
||||
|
||||
// Acknowledge the hijack before starting
|
||||
select {
|
||||
case closer := <-hijacked:
|
||||
// Make sure that the hijack gets closed when returning (results
|
||||
// in closing the hijack chan and freeing server's goroutines)
|
||||
if closer != nil {
|
||||
defer closer.Close()
|
||||
}
|
||||
case err := <-cErr:
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var encounteredError error
|
||||
|
||||
Reference in New Issue
Block a user