summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Holzinger <pholzing@redhat.com>2021-09-13 16:25:05 +0200
committerMatthew Heon <mheon@redhat.com>2021-09-16 09:42:14 -0400
commitffc8e57d3bb55e3df460c9df41a95993cf5dd2cf (patch)
tree6d60de0a4193439c45d4da71b357a669fd510480
parentfd8d332a4e440462f2dc8fbd1de4c291187fd92a (diff)
downloadpodman-ffc8e57d3bb55e3df460c9df41a95993cf5dd2cf.tar.gz
podman-ffc8e57d3bb55e3df460c9df41a95993cf5dd2cf.tar.bz2
podman-ffc8e57d3bb55e3df460c9df41a95993cf5dd2cf.zip
remove rootlessport socket to prevent EADDRINUSE
When we restart a container via podman restart or restart policy the rootlessport process fails with `address already in use` because the socketfile still exists. This is a regression and was introduced in commit abdedc31a25e. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
-rw-r--r--pkg/rootlessport/rootlessport_linux.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/pkg/rootlessport/rootlessport_linux.go b/pkg/rootlessport/rootlessport_linux.go
index 730d91aa2..10d135e0b 100644
--- a/pkg/rootlessport/rootlessport_linux.go
+++ b/pkg/rootlessport/rootlessport_linux.go
@@ -218,6 +218,9 @@ outer:
// we only need to have a socket to reload ports when we run under rootless cni
if cfg.RootlessCNI {
+ socketfile := filepath.Join(socketDir, cfg.ContainerID)
+ // make sure to remove the file if it exists to prevent EADDRINUSE
+ _ = os.Remove(socketfile)
// workaround to bypass the 108 char socket path limit
// open the fd and use the path to the fd as bind argument
fd, err := unix.Open(socketDir, unix.O_PATH, 0)
@@ -229,6 +232,8 @@ outer:
return err
}
err = unix.Close(fd)
+ // remove the socket file on exit
+ defer os.Remove(socketfile)
if err != nil {
logrus.Warnf("failed to close the socketDir fd: %v", err)
}