aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/podman/start.go20
-rw-r--r--test/e2e/run_restart_test.go39
2 files changed, 49 insertions, 10 deletions
diff --git a/cmd/podman/start.go b/cmd/podman/start.go
index 243fe71e2..5053abc07 100644
--- a/cmd/podman/start.go
+++ b/cmd/podman/start.go
@@ -104,18 +104,8 @@ func startCmd(c *cli.Context) error {
if err != nil {
return errors.Wrapf(err, "unable to parse annotations in %s", ctr.ID())
}
- err = ctr.Start()
- if err != nil {
- if lastError != nil {
- fmt.Fprintln(os.Stderr, lastError)
- }
- lastError = errors.Wrapf(err, "unable to start %s", container)
- continue
- }
// We only get a terminal session if both a tty was specified in the spec and
// -a on the command-line was given.
- // Must be done after Start() because we might be restarting
- // If so, the attach socket might be removed & recreated
if attach && tty {
// We increment the wg counter because we need to do the attach
wg.Add(1)
@@ -131,6 +121,14 @@ func startCmd(c *cli.Context) error {
return errors.Errorf("unable to attach to container %s", ctr.ID())
}
}
+ err = ctr.Start()
+ if err != nil {
+ if lastError != nil {
+ fmt.Fprintln(os.Stderr, lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to start %s", container)
+ continue
+ }
if !attach {
fmt.Println(ctr.ID())
}
@@ -147,6 +145,8 @@ func startCmd(c *cli.Context) error {
// Otherwise the container is probably still running
if attach && tty {
lastError = ctr.Cleanup()
+ // No need for LastError as we can only have one ctr
+ // with attach
}
}
return lastError
diff --git a/test/e2e/run_restart_test.go b/test/e2e/run_restart_test.go
new file mode 100644
index 000000000..8737cf4f8
--- /dev/null
+++ b/test/e2e/run_restart_test.go
@@ -0,0 +1,39 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman run restart containers", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+ })
+
+ It("Podman start after successful run", func() {
+ session := podmanTest.Podman([]string{"run", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"start", "--attach", "--latest"})
+ session2.WaitWithDefaultTimeout()
+ Expect(session2.ExitCode()).To(Equal(0))
+ })
+})