Docker 的 --privileged 标志详解
--privileged 是 Docker 中一个非常强大的标志,它会赋予容器几乎与主机相同的权限级别。
功能作用
- 完全设备访问:
- 容器可以访问主机上的所有设备(包括 GPU、USB、磁盘等)
- 绕过 Docker 默认的设备访问限制
- 内核能力:
- 授予容器所有 Linux 内核能力(capabilities)
- 允许执行需要高权限的操作(如加载内核模块、修改网络配置等)
- 安全限制解除:
- 禁用大多数安全隔离机制(如 AppArmor、SELinux 等)
- 允许容器内的进程几乎像主机上的进程一样运行
在你的 GPU 场景中的影响
在你的命令中,--privileged 可能是导致 nvidia-smi 显示所有 GPU 的原因:
- 虽然你使用
--gpus '"device=0,1,2"' 限制了 GPU 访问
- 但
--privileged 让容器绕过了这些限制
- 容器可以直接访问主机上的所有
/dev/nvidia* 设备
何时应该使用
--privileged 通常用于:
- 需要直接访问硬件设备的场景
- 运行需要特殊内核权限的服务
- 调试或开发需要完全系统访问的环境
安全警告
⚠️ 使用 --privileged 有重大安全风险:
- 容器可以完全控制主机系统
- 恶意软件可以轻松逃逸容器
- 应该尽量避免在生产环境使用