Move tty into container.json
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
parent
6054bda2b8
commit
d67915851d
5 changed files with 11 additions and 12 deletions
|
@ -17,6 +17,7 @@ Sample `container.json` file:
|
|||
```json
|
||||
{
|
||||
"hostname": "koye",
|
||||
"tty": true,
|
||||
"environment": [
|
||||
"HOME=/",
|
||||
"PATH=PATH=$PATH:/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
|
@ -55,7 +56,7 @@ Sample `container.json` file:
|
|||
"cgroups": {
|
||||
"name": "docker-koye",
|
||||
"parent": "docker",
|
||||
"memory": 524800
|
||||
"memory": 5248000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -72,11 +73,9 @@ rootfs and copy a `container.json` file into the directory with your specified c
|
|||
|
||||
To execution `/bin/bash` in the current directory as a container just run:
|
||||
```bash
|
||||
nsinit -tty exec /bin/bash
|
||||
nsinit exec /bin/bash
|
||||
```
|
||||
|
||||
If you want a proper tty setup inside the new container you must use the `-tty` flag when running nsinit.
|
||||
|
||||
If you wish to spawn another process inside the container while your current bash session is
|
||||
running just run the exact same command again to get another bash shell or change the command. If the original process dies, PID 1, all other processes spawned inside the container will also be killed and the namespace will be removed.
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ type Container struct {
|
|||
User string `json:"user,omitempty"` // user to execute the process as
|
||||
WorkingDir string `json:"working_dir,omitempty"` // current working directory
|
||||
Env []string `json:"environment,omitempty"` // environment to set
|
||||
Tty bool `json:"tty,omitempty"` // setup a proper tty or not
|
||||
Namespaces Namespaces `json:"namespaces,omitempty"` // namespaces to apply
|
||||
Capabilities Capabilities `json:"capabilities,omitempty"` // capabilities to drop
|
||||
Network *Network `json:"network,omitempty"` // nil for host's network stack
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"hostname": "koye",
|
||||
"tty": true,
|
||||
"environment": [
|
||||
"HOME=/",
|
||||
"PATH=PATH=$PATH:/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
|
@ -38,6 +39,6 @@
|
|||
"cgroups": {
|
||||
"name": "docker-koye",
|
||||
"parent": "docker",
|
||||
"memory": 524800
|
||||
"memory": 5248000
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
|
||||
// Exec performes setup outside of a namespace so that a container can be
|
||||
// executed. Exec is a high level function for working with container namespaces.
|
||||
func Exec(container *libcontainer.Container, tty bool, args []string) (int, error) {
|
||||
func Exec(container *libcontainer.Container, args []string) (int, error) {
|
||||
var (
|
||||
master *os.File
|
||||
console string
|
||||
|
@ -28,7 +28,7 @@ func Exec(container *libcontainer.Container, tty bool, args []string) (int, erro
|
|||
outPipe, errPipe io.ReadCloser
|
||||
)
|
||||
|
||||
if tty {
|
||||
if container.Tty {
|
||||
master, console, err = createMasterAndConsole()
|
||||
if err != nil {
|
||||
return -1, err
|
||||
|
@ -44,7 +44,7 @@ func Exec(container *libcontainer.Container, tty bool, args []string) (int, erro
|
|||
system.UsetCloseOnExec(r.Fd())
|
||||
|
||||
command := createCommand(container, console, r.Fd(), args)
|
||||
if !tty {
|
||||
if !container.Tty {
|
||||
if inPipe, err = command.StdinPipe(); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ func Exec(container *libcontainer.Container, tty bool, args []string) (int, erro
|
|||
w.Close()
|
||||
r.Close()
|
||||
|
||||
if tty {
|
||||
if container.Tty {
|
||||
go io.Copy(os.Stdout, master)
|
||||
go io.Copy(master, os.Stdin)
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ import (
|
|||
|
||||
var (
|
||||
console string
|
||||
tty bool
|
||||
pipeFd int
|
||||
)
|
||||
|
||||
|
@ -25,7 +24,6 @@ var (
|
|||
|
||||
func init() {
|
||||
flag.StringVar(&console, "console", "", "console (pty slave) path")
|
||||
flag.BoolVar(&tty, "tty", false, "create a tty")
|
||||
flag.IntVar(&pipeFd, "pipe", 0, "sync pipe fd")
|
||||
|
||||
flag.Parse()
|
||||
|
@ -52,7 +50,7 @@ func main() {
|
|||
if nspid > 0 {
|
||||
exitCode, err = nsinit.ExecIn(container, nspid, flag.Args()[1:])
|
||||
} else {
|
||||
exitCode, err = nsinit.Exec(container, tty, flag.Args()[1:])
|
||||
exitCode, err = nsinit.Exec(container, flag.Args()[1:])
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
|
Loading…
Reference in a new issue