diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go index 42223587ef..a7b16a7f0a 100644 --- a/libpod/container_internal_linux.go +++ b/libpod/container_internal_linux.go @@ -71,6 +71,14 @@ func (c *Container) prepare() error { go func() { defer wg.Done() + if c.state.State == define.ContainerStateStopped { + // networking should not be reused after a stop + if err := c.cleanupNetwork(); err != nil { + createNetNSErr = err + return + } + } + // Set up network namespace if not already set up noNetNS := c.state.NetNS == "" if c.config.CreateNetNS && noNetNS && !c.config.PostConfigureNetNS { diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go index 69401ad7c7..dcdd5f231c 100644 --- a/test/e2e/restart_test.go +++ b/test/e2e/restart_test.go @@ -193,12 +193,13 @@ var _ = Describe("Podman restart", func() { session.WaitWithDefaultTimeout() Expect(session).Should(ExitCleanly()) - testCmd := []string{"exec", "host-restart-test", "sh", "-c", "wc -l < /etc/hosts"} + testCmd := []string{"exec", "host-restart-test", "cat", "/etc/hosts"} // before restart beforeRestart := podmanTest.Podman(testCmd) beforeRestart.WaitWithDefaultTimeout() Expect(beforeRestart).Should(ExitCleanly()) + nHostLines := len(beforeRestart.OutputToStringArray()) session = podmanTest.Podman([]string{"restart", "host-restart-test"}) session.WaitWithDefaultTimeout() @@ -209,7 +210,8 @@ var _ = Describe("Podman restart", func() { Expect(afterRestart).Should(ExitCleanly()) // line count should be equal - Expect(beforeRestart.OutputToString()).To(Equal(afterRestart.OutputToString())) + Expect(afterRestart.OutputToStringArray()).To(HaveLen(nHostLines), + "number of host lines post-restart == number of lines pre-restart") }) It("podman restart all stopped containers with --all", func() { diff --git a/test/system/045-start.bats b/test/system/045-start.bats index b4840e76b1..52b2abc00d 100644 --- a/test/system/045-start.bats +++ b/test/system/045-start.bats @@ -58,6 +58,9 @@ load helpers is "$output" ".*$c1_id.*" "--filter finds container 1" is "$output" ".*$c3_id.*" "--filter finds container 3" + # start again, before this fix it could panic + run_podman start --filter restart-policy=always + # Start via filtered names run_podman start --filter restart-policy=on-failure $c2 $c3 is "$output" "$c2" "--filter finds container 2"