If container is not in correct state podman exec should exit with 126

This way a tool can determine if the container exists or not, but is in the
wrong state.

Since 126 is documeted as:
**_126_** if the **_contained command_** cannot be invoked

It makes sense that the container would exit with this state.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
<Fixed conflicts>
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
Daniel J Walsh
2019-06-12 05:13:26 -04:00
committed by Matthew Heon
parent 96ccc2edf5
commit a19975f96d
2 changed files with 9 additions and 2 deletions

View File

@ -109,5 +109,12 @@ func execCmd(c *cli.Context) error {
envs = append(envs, fmt.Sprintf("%s=%s", k, v))
}
return ctr.Exec(c.Bool("tty"), c.Bool("privileged"), envs, cmd, c.String("user"), c.String("workdir"))
if err := ctr.Exec(c.Bool("tty"), c.Bool("privileged"), envs, cmd, c.String("user"), c.String("workdir")); err != nil {
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
exitCode = 126
}
return err
}
return nil
}

View File

@ -285,7 +285,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user, workDir
// TODO can probably relax this once we track exec sessions
if conState != ContainerStateRunning {
return errors.Errorf("cannot exec into container that is not running")
return errors.Wrapf(ErrCtrStateInvalid, "cannot exec into container that is not running")
}
if privileged || c.config.Privileged {
capList = caps.GetAllCapabilities()