github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/libcontainerd/utils_linux.go (about)

     1  package libcontainerd
     2  
     3  import (
     4  	containerd "github.com/docker/containerd/api/grpc/types"
     5  	"github.com/opencontainers/specs/specs-go"
     6  )
     7  
     8  func getRootIDs(s specs.Spec) (int, int, error) {
     9  	var hasUserns bool
    10  	for _, ns := range s.Linux.Namespaces {
    11  		if ns.Type == specs.UserNamespace {
    12  			hasUserns = true
    13  			break
    14  		}
    15  	}
    16  	if !hasUserns {
    17  		return 0, 0, nil
    18  	}
    19  	uid := hostIDFromMap(0, s.Linux.UIDMappings)
    20  	gid := hostIDFromMap(0, s.Linux.GIDMappings)
    21  	return uid, gid, nil
    22  }
    23  
    24  func hostIDFromMap(id uint32, mp []specs.IDMapping) int {
    25  	for _, m := range mp {
    26  		if id >= m.ContainerID && id <= m.ContainerID+m.Size-1 {
    27  			return int(m.HostID + id - m.ContainerID)
    28  		}
    29  	}
    30  	return 0
    31  }
    32  
    33  func systemPid(ctr *containerd.Container) uint32 {
    34  	var pid uint32
    35  	for _, p := range ctr.Processes {
    36  		if p.Pid == InitFriendlyName {
    37  			pid = p.SystemPid
    38  		}
    39  	}
    40  	return pid
    41  }
    42  
    43  func convertRlimits(sr []specs.Rlimit) (cr []*containerd.Rlimit) {
    44  	for _, r := range sr {
    45  		cr = append(cr, &containerd.Rlimit{
    46  			Type: r.Type,
    47  			Hard: r.Hard,
    48  			Soft: r.Soft,
    49  		})
    50  	}
    51  	return
    52  }