Merge release-20210125.0-29-g25284ae3c (automated)
This commit is contained in:
commit
921f966289
|
@ -203,6 +203,19 @@ func LoadPaths(pid string) (map[string]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadPathsHelper(cgroup io.Reader) (map[string]string, error) {
|
func loadPathsHelper(cgroup io.Reader) (map[string]string, error) {
|
||||||
|
// For nested containers, in /proc/self/cgroup we see paths from host,
|
||||||
|
// which don't exist in container, so recover the container paths here by
|
||||||
|
// double-checking with /proc/pid/mountinfo
|
||||||
|
mountinfo, err := os.Open("/proc/self/mountinfo")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer mountinfo.Close()
|
||||||
|
|
||||||
|
return loadPathsHelperWithMountinfo(cgroup, mountinfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadPathsHelperWithMountinfo(cgroup, mountinfo io.Reader) (map[string]string, error) {
|
||||||
paths := make(map[string]string)
|
paths := make(map[string]string)
|
||||||
|
|
||||||
scanner := bufio.NewScanner(cgroup)
|
scanner := bufio.NewScanner(cgroup)
|
||||||
|
@ -225,6 +238,31 @@ func loadPathsHelper(cgroup io.Reader) (map[string]string, error) {
|
||||||
if err := scanner.Err(); err != nil {
|
if err := scanner.Err(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mfScanner := bufio.NewScanner(mountinfo)
|
||||||
|
for mfScanner.Scan() {
|
||||||
|
txt := mfScanner.Text()
|
||||||
|
fields := strings.Fields(txt)
|
||||||
|
if len(fields) < 9 || fields[len(fields)-3] != "cgroup" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, opt := range strings.Split(fields[len(fields)-1], ",") {
|
||||||
|
// Remove prefix for cgroups with no controller, eg. systemd.
|
||||||
|
opt = strings.TrimPrefix(opt, "name=")
|
||||||
|
if cgroupPath, ok := paths[opt]; ok {
|
||||||
|
root := fields[3]
|
||||||
|
relCgroupPath, err := filepath.Rel(root, cgroupPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
paths[opt] = relCgroupPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := mfScanner.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return paths, nil
|
return paths, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue