diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-02-18 21:19:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-18 21:19:00 +0100 |
commit | 3be1221aea406b38741598038532e43714619127 (patch) | |
tree | 33258bf1c8231627affadc722c5eb69e929843c6 | |
parent | 931eb1b58314d3385ab48601cb2cc3bd0c371196 (diff) | |
parent | 170fd7b038757228bf169e6180cab19a1e412f26 (diff) | |
download | podman-3be1221aea406b38741598038532e43714619127.tar.gz podman-3be1221aea406b38741598038532e43714619127.tar.bz2 podman-3be1221aea406b38741598038532e43714619127.zip |
Merge pull request #5245 from giuseppe/rootless-portmapping-detach
rootless: fix a regression when using -d
-rw-r--r-- | libpod/networking_linux.go | 14 | ||||
-rw-r--r-- | libpod/oci_conmon_linux.go | 10 |
2 files changed, 18 insertions, 6 deletions
diff --git a/libpod/networking_linux.go b/libpod/networking_linux.go index d90bcb708..fa8593f20 100644 --- a/libpod/networking_linux.go +++ b/libpod/networking_linux.go @@ -335,10 +335,13 @@ func (r *Runtime) setupRootlessPortMapping(ctr *Container, netnsPath string) (er return errors.Wrapf(err, "delete file %s", logPath) } - ctr.rootlessPortSyncR, ctr.rootlessPortSyncW, err = os.Pipe() - if err != nil { - return errors.Wrapf(err, "failed to create rootless port sync pipe") + if !ctr.config.PostConfigureNetNS { + ctr.rootlessPortSyncR, ctr.rootlessPortSyncW, err = os.Pipe() + if err != nil { + return errors.Wrapf(err, "failed to create rootless port sync pipe") + } } + cfg := rootlessport.Config{ Mappings: ctr.config.PortMappings, NetNSPath: netnsPath, @@ -355,6 +358,11 @@ func (r *Runtime) setupRootlessPortMapping(ctr *Container, netnsPath string) (er cmd := exec.Command(fmt.Sprintf("/proc/%d/exe", os.Getpid())) cmd.Args = []string{rootlessport.ReexecKey} // Leak one end of the pipe in rootlessport process, the other will be sent to conmon + + if ctr.rootlessPortSyncR != nil { + defer errorhandling.CloseQuiet(ctr.rootlessPortSyncR) + } + cmd.ExtraFiles = append(cmd.ExtraFiles, ctr.rootlessPortSyncR, syncW) cmd.Stdin = cfgR // stdout is for human-readable error, stderr is for debug log diff --git a/libpod/oci_conmon_linux.go b/libpod/oci_conmon_linux.go index 722012386..07d38693f 100644 --- a/libpod/oci_conmon_linux.go +++ b/libpod/oci_conmon_linux.go @@ -1161,6 +1161,13 @@ func (r *ConmonOCIRuntime) createOCIContainer(ctr *Container, restoreOptions *Co if ctr.config.NetMode.IsSlirp4netns() { if ctr.config.PostConfigureNetNS { + havePortMapping := len(ctr.Config().PortMappings) > 0 + if havePortMapping { + ctr.rootlessPortSyncR, ctr.rootlessPortSyncW, err = os.Pipe() + if err != nil { + return errors.Wrapf(err, "failed to create rootless port sync pipe") + } + } ctr.rootlessSlirpSyncR, ctr.rootlessSlirpSyncW, err = os.Pipe() if err != nil { return errors.Wrapf(err, "failed to create rootless network sync pipe") @@ -1176,9 +1183,6 @@ func (r *ConmonOCIRuntime) createOCIContainer(ctr *Container, restoreOptions *Co // Leak one end in conmon, the other one will be leaked into slirp4netns cmd.ExtraFiles = append(cmd.ExtraFiles, ctr.rootlessSlirpSyncW) - if ctr.rootlessPortSyncR != nil { - defer errorhandling.CloseQuiet(ctr.rootlessPortSyncR) - } if ctr.rootlessPortSyncW != nil { defer errorhandling.CloseQuiet(ctr.rootlessPortSyncW) // Leak one end in conmon, the other one will be leaked into rootlessport |