diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-11-18 21:59:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-18 21:59:13 +0100 |
commit | 348aafeb1ba549fee8859725ce497537b2477fac (patch) | |
tree | fe0c9002f127a520d810be7952d65fb093da92ce | |
parent | b24110ea568e07e76be5a8df2443767494d6490c (diff) | |
parent | 62d6b6bf74e2d9be340ee2aaab02d7c54e42535e (diff) | |
download | podman-348aafeb1ba549fee8859725ce497537b2477fac.tar.gz podman-348aafeb1ba549fee8859725ce497537b2477fac.tar.bz2 podman-348aafeb1ba549fee8859725ce497537b2477fac.zip |
Merge pull request #12348 from Luap99/rootless-netns
rootless netns, one netns per libpod tmp dir
-rw-r--r-- | libpod/networking_linux.go | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/libpod/networking_linux.go b/libpod/networking_linux.go index 9be600bb4..314a74427 100644 --- a/libpod/networking_linux.go +++ b/libpod/networking_linux.go @@ -4,6 +4,7 @@ package libpod import ( "crypto/rand" + "crypto/sha1" "fmt" "io/ioutil" "net" @@ -400,10 +401,7 @@ func (r *Runtime) GetRootlessNetNs(new bool) (*RootlessNetNS, error) { return nil, nil } var rootlessNetNS *RootlessNetNS - runDir, err := util.GetRuntimeDir() - if err != nil { - return nil, err - } + runDir := r.config.Engine.TmpDir lfile := filepath.Join(runDir, "rootless-netns.lock") lock, err := lockfile.GetLockfile(lfile) @@ -429,7 +427,15 @@ func (r *Runtime) GetRootlessNetNs(new bool) (*RootlessNetNS, error) { if err != nil { return nil, err } - path := filepath.Join(nsDir, rootlessNetNsName) + + // create a hash from the static dir + // the cleanup will check if there are running containers + // if you run a several libpod instances with different root/runroot directories this check will fail + // we want one netns for each libpod static dir so we use the hash to prevent name collisions + hash := sha1.Sum([]byte(r.config.Engine.StaticDir)) + netnsName := fmt.Sprintf("%s-%x", rootlessNetNsName, hash[:10]) + + path := filepath.Join(nsDir, netnsName) ns, err := ns.GetNS(path) if err != nil { if !new { @@ -437,8 +443,8 @@ func (r *Runtime) GetRootlessNetNs(new bool) (*RootlessNetNS, error) { return nil, errors.Wrap(err, "error getting rootless network namespace") } // create a new namespace - logrus.Debug("creating rootless network namespace") - ns, err = netns.NewNSWithName(rootlessNetNsName) + logrus.Debugf("creating rootless network namespace with name %q", netnsName) + ns, err = netns.NewNSWithName(netnsName) if err != nil { return nil, errors.Wrap(err, "error creating rootless network namespace") } |