如何在privileged模式Docker容器中限制指定GPU设备?
问题:特权Docker容器中无法限制指定GPU设备
我参考Docker官方GPU支持文档进行GPU容器操作,为实现Docker-in-Docker(dind)功能给容器添加了privileged选项,但配置保留GPU设备0和3后,nvidia-smi仍显示全部8块GPU。请问如何在该privileged容器中限制指定GPU设备?
配置示例:
services: test: image: tensorflow/tensorflow:latest-gpu privileged: true # <== 关键配置 deploy: resources: reservations: devices: - driver: nvidia device_ids: ['0', '3'] capabilities: [gpu]
解决方案
问题根源
privileged: true会完全绕过Docker的设备隔离机制,让容器直接访问宿主机所有硬件设备,导致你配置的Docker资源预留规则失效,所以nvidia-smi会显示全部GPU。
解决方法
在特权模式下,需要通过NVIDIA官方提供的环境变量强制限制可见GPU,这个方式不受Docker隔离机制的影响,具体操作如下:
修改你的Docker Compose配置,添加NVIDIA_VISIBLE_DEVICES环境变量,指定需要暴露的GPU设备ID:
services: test: image: tensorflow/tensorflow:latest-gpu privileged: true environment: - NVIDIA_VISIBLE_DEVICES=0,3 # 强制指定仅暴露0和3号GPU deploy: resources: reservations: devices: - driver: nvidia device_ids: ['0', '3'] capabilities: [gpu]
验证
启动容器后进入内部执行nvidia-smi,此时应该只会显示你指定的0和3号GPU设备。
补充:如果非必要,尽量避免使用
privileged: true,可以通过添加特定设备、权限capabilities来实现dind需求,这样Docker的GPU隔离规则就能正常生效。
内容的提问来源于stack exchange,提问作者Dorr
相关产品推荐
相关产品推荐

