Blob Blame History Raw
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
+}