首页/云/Docker 容器速查/docker run --device 最小设备授权
资源与安全50 条

docker run --device 最小设备授权

按最小必要原则把宿主设备节点映射进容器:默认权限 rwm,只读需求显式写 :r;动态设备用 --device-cgroup-rule 控制范围。

Docker 容器速查云更新于 2026-10-13

设备授权怎么做最稳

按最小必要原则把宿主设备节点映射进容器:默认权限是可读可写可创建节点,只需读取时要显式声明只读。动态设备可以用设备规则控制范围,避免把整类设备都放开。

基本信息

语法--device=/dev/设备[:容器内路径][:r|w|m]
默认权限可读可写可创建节点
只读声明加 :r 后缀
动态设备用设备规则限定范围
风险原则授权范围越大越难审计

典型使用场景

  • 需要访问串口、USB 等外设的采集类容器
  • 调试硬件相关应用时映射单个设备节点
  • 视频采集或编码加速类容器
  • 避免使用特权模式而只需单个设备时
  • 审计现有容器的设备授权范围

映射与核对

映射与核对
docker run --rm --device=/dev/ttyUSB0:/dev/ttyUSB0:r alpine ls -l /dev/ttyUSB0
docker run -d --device-cgroup-rule='c 189:* rmw' --name usb usb/collector:1.0
docker inspect -f '{{json .HostConfig.Devices}}' usb     # 核对设备授权

授权方式对照

授权方式范围适用场景
单个设备节点最小明确只用某一个设备
只读授权更小仅需读取的场景
设备规则较大设备会动态出现
特权模式最大尽量避免,需要专门评审
把设备给容器等于把该硬件的控制权交给容器内进程,评估仍以最小集为原则。
不写权限位时默认是可读可写可创建节点,只读设备要显式声明,否则容器内可以写入。
整块存储或内存映射类设备尽量不要给容器,授权范围越大越难审计。
设备会动态出现时用规则限定范围,比逐个映射节点更实用,但要控制规则覆盖的面。
审计时把容器实际获得的设备清单列出来,比只看启动参数更可靠。
很多场景用特权模式只是为了一个设备,改成单设备授权能显著收窄影响面。
设备在容器内的路径可以改写到其他位置,应用配置里写死的路径要跟着调整,否则会表现为设备不存在。

易错点

  • 不写权限位时默认可读可写,只读设备要显式声明
  • 整块存储或内存映射类设备给容器后难以审计,应尽量避免
  • 为了一个设备直接开特权模式,影响面被显著放大
  • 只检查启动参数不看容器实际获得的设备清单,审计结论可能不准

数据来源与参考

  • Docker 官方 CLI 参考:docker run --device / --device-cgroup-rule(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌