为什么Docker容器无法挂载/sys目录,不使用--privileged如何实现挂载
挂载失败原因
Docker默认对容器的系统访问权限做了多层安全限制:
- 默认情况下容器内的
/sys目录是以只读隔离状态挂载的,/sys/firmware作为暴露宿主机底层硬件、固件敏感信息的路径,属于默认禁止直接从宿主机挂载的路径范畴 - 默认的seccomp安全策略、Linux Capabilities权限配置都拦截了普通容器对
/sys/firmware的挂载请求,该限制和镜像类型无关,所以你用官方ubuntu:latest也能复现问题
非特权模式实现挂载的方案
不需要全开--privileged权限,有两个更安全的可选方案:
- 方案1:放宽对应权限限制
启动容器时仅添加必要的权限参数即可:
docker run \ --cap-add SYS_ADMIN \ --security-opt seccomp=unconfined \ -v /sys/firmware:/sys/firmware:ro \ <你的镜像名>
末尾加:ro配置只读挂载可以进一步降低安全风险,避免容器内修改宿主机固件相关配置。
- 方案2:先开放
/sys读写权限(更推荐,权限开放范围更小)
docker run \ -v /sys:/sys:rw \ -v /sys/firmware:/sys/firmware:ro \ <你的镜像名>
如果需要读取/sys/firmware下关联特定硬件的信息,可根据实际需求补充--device参数挂载对应设备文件即可。
内容的提问来源于stack exchange,提问作者Евгений Крамаров
相关产品推荐
相关产品推荐

