docker突然无法启动,NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.
之前一直正常运行的docker突然无法启动。由于docker中使用了CUDA,我运行nvidia-smi,结果报错:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.
经过一番分析,发现是Ubuntu系统自动升级了内核,导致新的内核版本与原来的显卡驱动不匹配。用dkms更新显卡驱动后,问题解决了,docker可以正常启动。特在此记录一下。
解决办法:
ls /usr/src | grep nvidia 查看nvidia驱动版本号,例如418.87.00
sudo dkms install -m nvidia -v 418.87.00 使用dkms更新nvidia驱动
如果没有dkms,先使用“sudo apt-get install dkms”安装dkms
dkms简介:
我们都知道,如果要使用没有集成到内核之中的Linux驱动程序需要手动编译。当然,这并不是一件什么难事,即使是对于没有编程经验的Linux使用者,只要稍微有点hacker的意识,努力看看代码包里的Readme或者INSTALL文件,按部就班的执行几条命令还是很容易办到的。但这里还有一个问题,Linux模块和内核是有依赖关系的,如果遇到因为发行版更新造成的内核版本的变动,之前编译的模块是无法继续使用的,我们只能手动再编译一遍。这样重复的操作有些繁琐且是反生产力的,而对于没有内核编程经验的使用者来说可能会造成一些困扰,使用者搞不清楚为什么更新系统之后,原来用的好好的驱动程序突然就不能用了。这里,就是Dell创建的DKMS项目的意义所在。DKMS全称是Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。
在使用dkms之前首先需要确保系统中已经安装了 DKMS。在Ubuntu下可以执行下面这个命令安装:sudo apt-get install dkms,安装完毕之后,我们就可以开始使用 DKMS了
参考文档:
https://www.cnblogs.com/wwang/archive/2011/06/21/2085571.html
关闭内核自动更新的方法
sudo vim /etc/apt/apt.conf.d/10periodic
sudo vim /etc/apt/apt.conf.d/20auto-upgrades
后面部分全部改成 “0”
然后 reboot