diff options
author | Giuseppe Scrivano <gscrivan@redhat.com> | 2021-06-09 13:55:03 +0200 |
---|---|---|
committer | Giuseppe Scrivano <gscrivan@redhat.com> | 2021-06-10 14:49:58 +0200 |
commit | 3b6cb8fabb2695df6518ee598abb945044afc758 (patch) | |
tree | 951f1d0b84fb16f98bde12aa50c7e4bc53e14915 /libpod | |
parent | d116bebdd564745f6d0adcd996e3a251b6d8e0e5 (diff) | |
download | podman-3b6cb8fabb2695df6518ee598abb945044afc758.tar.gz podman-3b6cb8fabb2695df6518ee598abb945044afc758.tar.bz2 podman-3b6cb8fabb2695df6518ee598abb945044afc758.zip |
container: ignore named hierarchies
when looking up the container cgroup, ignore named hierarchies since
containers running systemd as payload will create a sub-cgroup and
move themselves there.
Closes: https://github.com/containers/podman/issues/10602
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/container.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libpod/container.go b/libpod/container.go index c6f0cd618..4b9bea5fc 100644 --- a/libpod/container.go +++ b/libpod/container.go @@ -957,6 +957,12 @@ func (c *Container) cGroupPath() (string, error) { // is the libpod-specific one we're looking for. // // See #8397 on the need for the longest-path look up. + // + // And another workaround for containers running systemd as the payload. + // containers running systemd moves themselves into a child subgroup of + // the named systemd cgroup hierarchy. Ignore any named cgroups during + // the lookup. + // See #10602 for more details. procPath := fmt.Sprintf("/proc/%d/cgroup", c.state.PID) lines, err := ioutil.ReadFile(procPath) if err != nil { @@ -972,6 +978,10 @@ func (c *Container) cGroupPath() (string, error) { logrus.Debugf("Error parsing cgroup: expected 3 fields but got %d: %s", len(fields), procPath) continue } + // Ignore named cgroups like name=systemd. + if bytes.Contains(fields[1], []byte("=")) { + continue + } path := string(fields[2]) if len(path) > len(cgroupPath) { cgroupPath = path |