diff --git a/nsinit/command.go b/nsinit/command.go index 8ddf1e7e..5546065b 100644 --- a/nsinit/command.go +++ b/nsinit/command.go @@ -1,7 +1,6 @@ package nsinit import ( - "fmt" "github.com/dotcloud/docker/pkg/libcontainer" "github.com/dotcloud/docker/pkg/system" "os" @@ -12,7 +11,7 @@ import ( // parent processes and creates an *exec.Cmd that will be used to fork/exec the // namespaced init process type CommandFactory interface { - Create(container *libcontainer.Container, console string, syncFd uintptr, args []string) *exec.Cmd + Create(container *libcontainer.Container, console string, syncFd *os.File, args []string) *exec.Cmd } type DefaultCommandFactory struct { @@ -22,16 +21,17 @@ type DefaultCommandFactory struct { // Create will return an exec.Cmd with the Cloneflags set to the proper namespaces // defined on the container's configuration and use the current binary as the init with the // args provided -func (c *DefaultCommandFactory) Create(container *libcontainer.Container, console string, pipe uintptr, args []string) *exec.Cmd { +func (c *DefaultCommandFactory) Create(container *libcontainer.Container, console string, pipe *os.File, args []string) *exec.Cmd { // get our binary name from arg0 so we can always reexec ourself command := exec.Command(os.Args[0], append([]string{ "-console", console, - "-pipe", fmt.Sprint(pipe), + "-pipe", "3", "-root", c.Root, "init"}, args...)...) system.SetCloneFlags(command, uintptr(GetNamespaceFlags(container.Namespaces))) command.Env = container.Env + command.ExtraFiles = []*os.File{pipe} return command } diff --git a/nsinit/exec.go b/nsinit/exec.go index f1a4e247..4963f126 100644 --- a/nsinit/exec.go +++ b/nsinit/exec.go @@ -35,7 +35,7 @@ func (ns *linuxNs) Exec(container *libcontainer.Container, term Terminal, args [ term.SetMaster(master) } - command := ns.commandFactory.Create(container, console, syncPipe.child.Fd(), args) + command := ns.commandFactory.Create(container, console, syncPipe.child, args) if err := term.Attach(command); err != nil { return -1, err } diff --git a/nsinit/sync_pipe.go b/nsinit/sync_pipe.go index 7b29e986..f724f525 100644 --- a/nsinit/sync_pipe.go +++ b/nsinit/sync_pipe.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "github.com/dotcloud/docker/pkg/libcontainer" - "github.com/dotcloud/docker/pkg/system" "io/ioutil" "os" ) @@ -22,7 +21,6 @@ func NewSyncPipe() (s *SyncPipe, err error) { if err != nil { return nil, err } - system.UsetCloseOnExec(s.child.Fd()) return s, nil }