libpod: do not resuse networking on start
If a container was stopped and we try to start it before we called cleanup it tried to reuse the network which caused a panic as the pasta code cannot deal with that. It is also never correct as the netns must be created by the runtime in case of custom user namespaces used. As such the proper thing is to clean the netns up first. Also change a e2e test to report better errors. It is not directly related to this chnage but it failed on v1 of this patch so we noticed the ugly error message it produced. Thanks to Ed for the fix. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
parent
7ff1494c47
commit
a9de888a15
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue