如何在非特权模式Docker容器中访问gigedrvframos驱动?
非特权容器访问gigedrvframos驱动最小权限配置方案
根据使用场景选择对应方案即可,优先选择权限更低的方案一。
方案一:仅访问宿主机已加载的驱动(最小权限,推荐)
前提:提前在宿主机完成驱动加载,执行 sudo modprobe gigedrvframos 确认lsmod可查到驱动、驱动运行正常。
启动容器时添加以下参数:
- 授予设备IO访问能力:
--cap-add SYS_RAWIO - 挂载驱动对应的设备文件:
--device /dev/[你的驱动对应的设备名,可在宿主机/dev路径下查找gige相关设备节点] - 只读挂载驱动的sysfs路径:
-v /sys/bus/pci/drivers/gigedrvframos:/sys/bus/pci/drivers/gigedrvframos:ro - 共享宿主机网络栈(gige驱动依赖网卡通信):
--net=host
注意:如果驱动有配套的规则文件,可额外添加挂载 -v /etc/udev/rules.d/[驱动对应的rules文件]:/etc/udev/rules.d/[驱动对应的rules文件]:ro
方案二:需要在容器内执行modprobe加载驱动
如果业务场景必须在容器内部执行modprobe操作,添加以下启动参数:
- 授予内核模块操作权限:
--cap-add SYS_MODULE - 只读挂载宿主机内核模块目录:
-v /lib/modules/$(uname -r):/lib/modules/$(uname -r):ro - 读写挂载sysfs目录:
-v /sys:/sys:rw
注意:SYS_MODULE权限属于较高权限,仅在必须从容器内加载驱动时使用,且容器内核版本必须和宿主机内核版本完全一致,否则依然会加载失败。
验证方式
容器启动后,先执行 lsmod | grep gigedrvframos 确认驱动可见,再运行业务代码验证访问正常即可。
内容的提问来源于stack exchange,提问作者Alexis Winters
相关产品推荐
相关产品推荐

