diff options
author | Matthew Heon <mheon@redhat.com> | 2019-02-14 09:58:38 -0500 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-02-14 15:54:34 -0500 |
commit | 2e6fff1f5eaa55ce88799447fdcb8a4145b789c3 (patch) | |
tree | 05846b3ee353eff82c4a8732a40030320523e844 /cmd | |
parent | b5653a7f3644fe62f0b50b2193ef3010e2b399dd (diff) | |
download | podman-2e6fff1f5eaa55ce88799447fdcb8a4145b789c3.tar.gz podman-2e6fff1f5eaa55ce88799447fdcb8a4145b789c3.tar.bz2 podman-2e6fff1f5eaa55ce88799447fdcb8a4145b789c3.zip |
Fix error code retrieval for podman start --attach
When we start a container with 'podman run' and it exits and is
removed before we get the code, we grab its exit code from the
Conmon exit file. Podman start --attach wants to do the same, but
was missing the logic. Fix that here.
Also, remove some --rm handling leftover in start. Don't need it
anymore, we have the cleanup process now.
Signed-off-by: Matthew Heon <mheon@redhat.com>
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/podman/start.go | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/cmd/podman/start.go b/cmd/podman/start.go index 3a606d662..1f671aefd 100644 --- a/cmd/podman/start.go +++ b/cmd/podman/start.go @@ -1,14 +1,12 @@ package main import ( - "encoding/json" "fmt" "os" "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/cmd/podman/libpodruntime" "github.com/containers/libpod/libpod" - cc "github.com/containers/libpod/pkg/spec" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -124,12 +122,22 @@ func startCmd(c *cliconfig.StartValues) error { } if ecode, err := ctr.Wait(); err != nil { - logrus.Errorf("unable to get exit code of container %s: %q", ctr.ID(), err) + if errors.Cause(err) == libpod.ErrNoSuchCtr { + // The container may have been removed + // Go looking for an exit file + ctrExitCode, err := readExitFile(runtime.GetConfig().TmpDir, ctr.ID()) + if err != nil { + logrus.Errorf("Cannot get exit code: %v", err) + exitCode = 127 + } else { + exitCode = ctrExitCode + } + } } else { exitCode = int(ecode) } - return ctr.Cleanup(ctx) + return nil } if ctrRunning { fmt.Println(ctr.ID()) @@ -137,18 +145,6 @@ func startCmd(c *cliconfig.StartValues) error { } // Handle non-attach start if err := ctr.Start(ctx); err != nil { - var createArtifact cc.CreateConfig - artifact, artifactErr := ctr.GetArtifact("create-config") - if artifactErr == nil { - if jsonErr := json.Unmarshal(artifact, &createArtifact); jsonErr != nil { - logrus.Errorf("unable to detect if container %s should be deleted", ctr.ID()) - } - if createArtifact.Rm { - if rmErr := runtime.RemoveContainer(ctx, ctr, true, false); rmErr != nil { - logrus.Errorf("unable to remove container %s after it failed to start", ctr.ID()) - } - } - } if lastError != nil { fmt.Fprintln(os.Stderr, lastError) } |