diff --git a/components/engine/daemon/execdriver/native/driver.go b/components/engine/daemon/execdriver/native/driver.go index 030c3b5464..816207ed37 100644 --- a/components/engine/daemon/execdriver/native/driver.go +++ b/components/engine/daemon/execdriver/native/driver.go @@ -162,18 +162,18 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba logrus.Warnf("Your kernel does not support OOM notifications: %s", err) } waitF := p.Wait - if nss := cont.Config().Namespaces; nss.Contains(configs.NEWPID) { + if nss := cont.Config().Namespaces; !nss.Contains(configs.NEWPID) { // we need such hack for tracking processes with inerited fds, // because cmd.Wait() waiting for all streams to be copied waitF = waitInPIDHost(p, cont) } ps, err := waitF() if err != nil { - if err, ok := err.(*exec.ExitError); !ok { + execErr, ok := err.(*exec.ExitError) + if !ok { return execdriver.ExitStatus{ExitCode: -1}, err - } else { - ps = err.ProcessState } + ps = execErr.ProcessState } cont.Destroy() @@ -189,16 +189,17 @@ func waitInPIDHost(p *libcontainer.Process, c libcontainer.Container) func() (*o return nil, err } + processes, err := c.Processes() + process, err := os.FindProcess(pid) s, err := process.Wait() if err != nil { - if err, ok := err.(*exec.ExitError); !ok { + execErr, ok := err.(*exec.ExitError) + if !ok { return s, err - } else { - s = err.ProcessState } + s = execErr.ProcessState } - processes, err := c.Processes() if err != nil { return s, err }