Docker容器:

Docker容器将一个软件包在一个完整的文件系统中,该文件系统包含运行所需要的一切:代码,运行时,系统工具,系统库等任何可以安装在服务器上的东西。这保证了软件无论其环境如何,都将始终运行相同的程序。

Nvidia-Docker设计初衷:

Docker容器与平台无关,但也与硬件无关。当使用特殊的硬件,如NVIDIA GPUs时,这就产生了一个问题,这些硬件需要的内核模块和用户级库来操作。因此,Docker本机不支持容器中的NVIDIA GPUs

nvidia-docker本质上是围绕docker命令的包装器,它透明地为容器提供了在GPU上执行代码所需的组件。只有在使用nvidia-docker run来执行使用GPUs的容器时才是绝对必要的。nvidia-docker实现了对docker client的封装,并在容器启动时,将必要的GPU device和libraries挂载到容器中。

参考文档:nvidia-docker工具介绍

Nvidia-Docker1.0和Nvidia-Docker2.0的区别

Nvidia-docker1.0存在的问题:

  • 设计高度与docker耦合,不支持其它的容器运行时。如: LXC, CRI-O及未来可能会增加的容器运行时。
  • 不能更好的利用docker生态的其它工具。如: docker compose。
  • 不能将GPU作为调度系统的一种资源来进行灵活的调度。
  • 完善容器运行时对GPU的支持。如: 自动的获取用户层面的NVIDIA Driver libraries, NVIDIA kernel modules, device ordering等。

Nvidia-docker2.0的实现机制:

其核心组建包括:nvidia-docker 2.0containerdnvidia-container-runtimelibnvidia-container以及runc直接的关系。

  • nvidia-docker2.0

    它是一个简单的包,主要通过修改docker的配置文件/etc/docker/daemon.json来让docker使用NVIDIA Container runtime

  • nvidia-container-runtime

    真正的核心部分,它在原有的docker容器运行时runc的基础上增加一个prestart hook,用于调用libnvidia-container库。

  • libnvidia-container

    提供一个库和一个简单的CLI工具,使用这个库可以使NVIDIA GPU被Linux容器使用。

  • Containerd

    主要负责的工作是:

    • 管理容器的生命周期(从容器的创建到销毁)
    • 拉取/推送容器镜像
    • 存储管理(管理镜像及容器数据的存储)
    • 调用runc 运行容器
    • 管理容器的网络接口及网络
  • RunC

    一个轻量级的工具,用来运行容器。

参考文档:nvidia-docker2.0介绍

问题描述

环境:Ubuntu 18.04.1

启动容器:

docker start containerID

抛出错误:

Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
Error: failed to start containers: 94b85ba86c95

出现该错误的原因在于没有安装nvidia-docker

解决方案:

  1. 更新apt库,加载nvidia-docker2

    $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    $ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    $ sudo apt-get update
    
  2. 安装nvidia-docker2软件包并重新加载docker守护程序配置

    $ sudo apt-get install nvidia-docker2
    $ sudo pkill -SIGHUP dockerd
    $ sudo systemctl restart docker
    

参考文档:安装nvidia-docker2.0

Ubuntu18.04报错解决方案:could not select device driver ““ with capabilities: [[gpu]]相关推荐

  1. docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

    Docker容器中使用Nvidia GPU报错 docker: Error response from daemon: could not select device driver "&qu ...

  2. docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

    docker: Error response from daemon: could not select device driver "" with capabilities: [ ...

  3. docker: cloud not select device driver with “capabilities:[[gpu]]“

    用docker创建任务,指定使用gpu的时候,报错.国外网友给出的答案解决了问题,记录一下. distribution=$(. /etc/os-release;echo I D ID IDVERSIO ...

  4. Ubuntu18.04报错:Aborted (core dumped) (classes.jar.toc.tmp ) ninja: build stopped: subcommand failed解决

    报错:/bin/bash: line 1: 13460 Aborted (core dumped) ( out/host/linux-x86/bin/ijar out/target/common/ob ...

  5. Ubuntu18.04报错:make[1]: *** No rule to make target armv4-mont.o, needed by build-msm8916/lk. Stop.

    报错:make[1]: *** No rule to make target build-msm8916/lib/openssl/crypto/bn/asm/armv4-mont.o, needed ...

  6. Ubuntu18.04报错:system/tools/aidl/aidl_language_y.yy: error: define variable ‘api.pure‘ is not used

    报错:system/tools/aidl/aidl_language_y.yy:17.1-12: error: %define variable 'api.pure' is not used解决: # ...

  7. Ubuntu18.04报错:bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file解决

    报错:bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file报错原因:在x86 64位系统执行32位程序 ...

  8. Debug docker: docker: Error response from daemon: could not select device driver ““ with capabilitie

    报错信息 docker: Error response from daemon: could not select device driver "" with capabiliti ...

  9. ubuntu16.04 安装apache2报错 解决方案

    为什么80%的码农都做不了架构师?>>>    我的原CSDN博文: ubuntu16.04 安装apache2报错 解决方案 2016/11/07 转载于:https://my.o ...

最新文章

  1. mysql 去除括号_MySQL语句批量去除括号及内容
  2. 题目1185:特殊排序
  3. 181102 Python环境搭建(安装Sublime Text3)
  4. 【Android 插件化】Hook 插件化框架 ( hook 插件化原理 | 插件包管理 )
  5. python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
  6. endwith php,endwith函数怎么使用
  7. Ubuntu安装Yafu方法及资料
  8. Xamarin教程索引页
  9. 边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
  10. 黎曼流形(Riemannian manifold)
  11. 蓝牙耳机连接苹果手机成功,但是手机音乐依然外放。
  12. 如何快速掌握技术和知识点
  13. Linux杀掉挖矿病毒(qW3xT.2)
  14. 常见的相似度计算方式
  15. . xx.sh ./xx.sh sh xx.sh的区别
  16. Qt_Opencv安装
  17. Lab3-1 832001227
  18. 软件构造学习总结(个人观点)
  19. 我们用PyTorch搭建神经网络时,会遇到nn.ReLU(inplace=True),inplace=True是什么意思呢?
  20. Qt编写物联网管理平台40-类型种类

热门文章

  1. DASCTF X GFCTF 2022十月 Misc
  2. USB协议分析仪在实际USB连通中的作用
  3. VSCode同步上传代码到Gitee
  4. CVPR2020 | 旷视研究院提出PVN3D:基于3D关键点投票网络的单目6DoF位姿估计算法
  5. 停车场的设计你认真了吗?
  6. Kdevelop如何调整程序的字体大小和颜色
  7. oppo锁屏断网设置在哪里呀_oppo手机不自动锁屏怎么设置怎么办
  8. 【如何使用机智云平台进行ESP8266固件烧入】
  9. FFF Warm Up Contest 12 - NEERC 2011 [iSea]
  10. tesseract4.1.0 win10 VS2017profess编译