func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error) { // take the Command and populate the libcontainer.Container from it container, err := d.createContainer(c) if err != nil { return -1, err } d.activeContainers[c.ID] = &c.Cmd var ( term nsinit.Terminal factory = &dockerCommandFactory{c: c, driver: d} stateWriter = &dockerStateWriter{ callback: startCallback, c: c, dsw: &nsinit.DefaultStateWriter{filepath.Join(d.root, c.ID)}, } ns = nsinit.NewNsInit(factory, stateWriter, createLogger(os.Getenv("DEBUG"))) args = append([]string{c.Entrypoint}, c.Arguments...) ) if err := d.createContainerRoot(c.ID); err != nil { return -1, err } defer d.removeContainerRoot(c.ID) if c.Tty { term = &dockerTtyTerm{ pipes: pipes, } } else { term = &dockerStdTerm{ pipes: pipes, } } c.Terminal = term if err := d.writeContainerFile(container, c.ID); err != nil { return -1, err } return ns.Exec(container, term, args) }