aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2019-06-12 05:13:26 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-06-25 12:45:01 -0400
commita19975f96d2ee7efe186d9aa0be42285cfafa3f4 (patch)
tree52040f3019eaedda85bd80759e766baa80d70cc1
parent96ccc2edf597a191fe03eff98b2905788a26553f (diff)
downloadpodman-a19975f96d2ee7efe186d9aa0be42285cfafa3f4.tar.gz
podman-a19975f96d2ee7efe186d9aa0be42285cfafa3f4.tar.bz2
podman-a19975f96d2ee7efe186d9aa0be42285cfafa3f4.zip
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>
-rw-r--r--cmd/podman/exec.go9
-rw-r--r--libpod/container_api.go2
2 files changed, 9 insertions, 2 deletions
diff --git a/cmd/podman/exec.go b/cmd/podman/exec.go
index 073e72e64..9e265b48c 100644
--- a/cmd/podman/exec.go
+++ b/cmd/podman/exec.go
@@ -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
}
diff --git a/libpod/container_api.go b/libpod/container_api.go
index 4eaf737b0..832801aeb 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -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()