runc 容器字符设备访问转发到宿主机源码解析
runc 容器字符设备访问转发到宿主机源码解析
在 runc 中,将容器内字符设备访问转发到宿主机是通过使用 'runc/libcontainer/devices' 包中的函数来实现的。具体的源码函数是 'Apply' 函数。
'Apply' 函数的定义如下:
func Apply(cgroupPaths map[string]string, devices []*configs.Device) error
该函数接收两个参数:'cgroupPaths' 表示容器的 cgroup 路径,'devices' 表示要转发的设备列表。
在该函数中,首先会检查容器内的设备是否存在,并将其添加到容器的 cgroup 中。然后,将设备的主要和次要号码转发到宿主机的 cgroup 路径中。
以下是 'Apply' 函数的源码示例:
func Apply(cgroupPaths map[string]string, devices []*configs.Device) error {
for _, device := range devices {
if err := createDevice(device); err != nil {
return err
}
}
for cgroup, path := range cgroupPaths {
for _, device := range devices {
if err := addDevice(path, device); err != nil {
return err
}
}
}
return nil
}
在上述代码中,'createDevice' 函数用于创建设备节点,'addDevice' 函数用于将设备添加到 cgroup 路径中。
这样,在调用 'Apply' 函数后,容器内的字符设备访问就会被转发到宿主机。
原文地址: https://www.cveoy.top/t/topic/m5cn 著作权归作者所有。请勿转载和采集!