github.com/nf/docker@v1.8.1/runconfig/exec.go (about)

     1  package runconfig
     2  
     3  import (
     4  	flag "github.com/docker/docker/pkg/mflag"
     5  )
     6  
     7  type ExecConfig struct {
     8  	User         string
     9  	Privileged   bool
    10  	Tty          bool
    11  	Container    string
    12  	AttachStdin  bool
    13  	AttachStderr bool
    14  	AttachStdout bool
    15  	Detach       bool
    16  	Cmd          []string
    17  }
    18  
    19  func ParseExec(cmd *flag.FlagSet, args []string) (*ExecConfig, error) {
    20  	var (
    21  		flStdin   = cmd.Bool([]string{"i", "-interactive"}, false, "Keep STDIN open even if not attached")
    22  		flTty     = cmd.Bool([]string{"t", "-tty"}, false, "Allocate a pseudo-TTY")
    23  		flDetach  = cmd.Bool([]string{"d", "-detach"}, false, "Detached mode: run command in the background")
    24  		flUser    = cmd.String([]string{"u", "-user"}, "", "Username or UID (format: <name|uid>[:<group|gid>])")
    25  		execCmd   []string
    26  		container string
    27  	)
    28  	cmd.Require(flag.Min, 2)
    29  	if err := cmd.ParseFlags(args, true); err != nil {
    30  		return nil, err
    31  	}
    32  	container = cmd.Arg(0)
    33  	parsedArgs := cmd.Args()
    34  	execCmd = parsedArgs[1:]
    35  
    36  	execConfig := &ExecConfig{
    37  		User: *flUser,
    38  		// TODO(vishh): Expose 'Privileged' once it is supported.
    39  		// +		//Privileged:   job.GetenvBool("Privileged"),
    40  		Tty:       *flTty,
    41  		Cmd:       execCmd,
    42  		Container: container,
    43  		Detach:    *flDetach,
    44  	}
    45  
    46  	// If -d is not set, attach to everything by default
    47  	if !*flDetach {
    48  		execConfig.AttachStdout = true
    49  		execConfig.AttachStderr = true
    50  		if *flStdin {
    51  			execConfig.AttachStdin = true
    52  		}
    53  	}
    54  
    55  	return execConfig, nil
    56  }