@@ -467,8 +467,54 @@ func (r *OCIRuntime) unpauseContainer(ctr *Container) error {
467467 return utils .ExecCmdWithStdStreams (os .Stdin , os .Stdout , os .Stderr , r .path , "resume" , ctr .ID ())
468468}
469469
470- //execContiner executes a command in a running container
471- func (r * OCIRuntime ) execContainer (c * Container , cmd []string , globalOpts runcGlobalOptions , commandOpts runcExecOptions ) error {
472- r .RuncExec (c , cmd , globalOpts , commandOpts )
473- return nil
470+ // execContainer executes a command in a running container
471+ // TODO: Add --detach support
472+ // TODO: Convert to use conmon
473+ // TODO: add --pid-file and use that to generate exec session tracking
474+ func (r * OCIRuntime ) execContainer (c * Container , cmd []string , tty bool , user string , capAdd , env []string ) error {
475+ args := []string {}
476+
477+ // TODO - should we maintain separate logpaths for exec sessions?
478+ args = append (args , "--log" , c .LogPath ())
479+
480+ args = append (args , "exec" )
481+
482+ args = append (args , "--cwd" , c .config .Spec .Process .Cwd )
483+
484+ if tty {
485+ args = append (args , "--tty" )
486+ }
487+
488+ if user != "" {
489+ args = append (args , "--user" , user )
490+ }
491+
492+ if c .config .Spec .Process .NoNewPrivileges {
493+ args = append (args , "--no-new-privs" )
494+ }
495+
496+ for _ , cap := range capAdd {
497+ args = append (args , "--cap" , cap )
498+ }
499+
500+ for _ , envVar := range env {
501+ args = append (args , "--env" , envVar )
502+ }
503+
504+ // Append container ID and command
505+ args = append (args , c .ID ())
506+ args = append (args , cmd ... )
507+
508+ logrus .Debugf ("Starting runtime %s with following arguments: %v" , r .path , args )
509+
510+ execCmd := exec .Command (r .path , args ... )
511+ execCmd .Stdout = os .Stdout
512+ execCmd .Stderr = os .Stderr
513+ execCmd .Stdin = os .Stdin
514+
515+ if err := execCmd .Start (); err != nil {
516+ return errors .Wrapf (err , "error starting exec command for container %s" , c .ID ())
517+ }
518+
519+ return execCmd .Wait ()
474520}
0 commit comments