From 3921f10a729054c23296f392b0f271c1ac5e5770 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Tue, 6 Feb 2018 16:51:05 -0500 Subject: cleanup network stack as well as storage when container shuts down. This patch will cleanup the network stack when the container exits Signed-off-by: Daniel J Walsh --- libpod/container_api.go | 11 +++++++++-- libpod/container_internal.go | 13 +++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'libpod') diff --git a/libpod/container_api.go b/libpod/container_api.go index 3693ab78b..72df60eb8 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -694,8 +694,9 @@ func (c *Container) Wait() (int32, error) { return exitCode, nil } -// CleanupStorage unmounts all mount points in container and cleans up container storage -func (c *Container) CleanupStorage() error { +// Cleanup unmounts all mount points in container and cleans up container storage +// It also cleans up the network stack +func (c *Container) Cleanup() error { if !c.locked { c.lock.Lock() defer c.lock.Unlock() @@ -703,6 +704,12 @@ func (c *Container) CleanupStorage() error { return err } } + + // Stop the container's network namespace (if it has one) + if err := c.cleanupNetwork(); err != nil { + logrus.Errorf("unable cleanup network for container %s: %q", c.ID(), err) + } + return c.cleanupStorage() } diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 77e456fe1..d434630a3 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -365,6 +365,19 @@ func (c *Container) mountStorage() (err error) { return c.save() } +// cleanupNetwork unmounts and cleans up the container's network +func (c *Container) cleanupNetwork() error { + // Stop the container's network namespace (if it has one) + if err := c.runtime.teardownNetNS(c); err != nil { + logrus.Errorf("unable cleanup network for container %s: %q", c.ID(), err) + } + + c.state.NetNS = nil + c.state.SubnetMask = "" + c.state.IPAddress = "" + return c.save() +} + // cleanupStorage unmounts and cleans up the container's root filesystem func (c *Container) cleanupStorage() error { if !c.state.Mounted { -- cgit v1.2.3-54-g00ecf