diff -up docker-0be3e217c42ecf554bf5117bec9c832bd3f3b6fd/runc-66aedde759f33c190954815fb765eedc1d782dd9/libcontainer/cgroups/systemd/apply_systemd.go.orig docker-0be3e217c42ecf554bf5117bec9c832bd3f3b6fd/runc-66aedde759f33c190954815fb765eedc1d782dd9/libcontainer/cgroups/systemd/apply_systemd.go --- docker-7d71120b1f31f8bb4da733b5f1e5960b434696de/runc-8891bca22c049cd2dcf13ba2438c0bac8d7f3343/libcontainer/cgroups/systemd/apply_systemd.go.orig 2021-02-12 11:34:42.913036670 +0100 +++ docker-7d71120b1f31f8bb4da733b5f1e5960b434696de/runc-8891bca22c049cd2dcf13ba2438c0bac8d7f3343/libcontainer/cgroups/systemd/apply_systemd.go 2021-02-12 11:37:14.165696606 +0100 @@ -7,6 +7,7 @@ import ( "fmt" "io/ioutil" "os" + "os/exec" "path/filepath" "strings" "sync" @@ -130,6 +131,10 @@ func (m *Manager) Apply(pid int) error { properties = append(properties, newProp("PIDs", []uint32{uint32(pid)})) } + if systemdHasCollectMode() { + properties = append(properties, newProp("CollectMode", "inactive-or-failed")) + } + // This is only supported on systemd versions 218 and above. properties = append(properties, newProp("Delegate", true)) @@ -473,3 +478,13 @@ func isUnitExists(err error) bool { } return false } + +func systemdHasCollectMode() bool { + // This will show whether the currently running systemd supports CollectMode + _, err := exec.Command("systemctl", "show", "-p", "CollectMode", "systemd").Output() + if err != nil { + logrus.Debugf("Failed to check systemd CollectMode: %v", err) + return false + } + return true +}