Ubuntu16.04+nvidia docker

一、安装过程:

https://blog.csdn.net/heiheiya/article/details/102834222

1、先卸载干净以前的nvidia-docker

sudo docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker

2、添加软件包存储库

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list |
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

3、查看可安装版本

apt-cache madison nvidia-docker2 nvidia-container-runtime

 4、安装nvidia-docker2【找到合适的版本安装,不一定按照下面的版本】

sudo apt-get install -y nvidia-docker2=2.0.3+docker18.09.7-3 nvidia-container-runtime=2.0.0+docker18.09.7-3

5、测试成功 [下载合适的镜像环境,比如python3.6环境,比如nvidia cuda9的镜像]

docker run --runtime nvidia nvidia/cuda:9.0-base nvidia-smi

 6、安装tensorflow-gpu(不推荐直接下载tensorflow镜像,可以先自己在docker启动后安装cudajupyter notebook ensorflow自己需要的版本)

nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu

以上命令,如果没有安装tensorflow-gpu则会主动安装并启动。

查看所有正在启动的容器:docker ps -a

 进入容器:docker exec -it 2be581570c90 bash

二、卸载docker过程

https://blog.csdn.net/weixin_41282397/article/details/86524297

方法一:

sudo apt-get remove docker  
sudo apt-get remove --auto-remove docker

方法二:
sudo apt remove docker-ce
方法三:
# 查询相关软件包
dpkg -l | grep docker
# 删除这个包
sudo apt remove --purge docker***【这个是还有什么跟docker相关的,都删掉】

三、遇到的错误

1、错误1

详细操作:https://www.cnblogs.com/Lee-yl/p/12108255.html

ERROR:gzip: stdout: No space left on deviceE: mkinitramfs failure cpio 1

在sudo apt-get install时报错,

采用df -h命令查看时,发现/boot目录下空间不够,故要将未使用的Ubuntu内核版本删除。

采用dpkg --get-selections|grep linux命令查看安装了哪些Ubuntu内核版本删除

采用uname -a查看当前使用的Ubuntu内核版本。

删除无用的内核版本:采用sudo apt-get purge删除,如输入命令:sudo apt-get purge linux-modules-4.15.0-45-generic【注意,Ubuntu16.04内核版本不要太高,后面容易出问题】

 

2、错误2

sudo apt-get install *****
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
E: 无法定位软件包 *****

原因:

方法一:【可能不能成功】

sudo apt-get update

更新一些软件源。

方法二:【换源】

  1. 在 etc/apt 下的sources.list
  2. 添加镜像源:*************
  3. $ sudo apt-get update

3、错误3:

下列软件包有未满足的依赖关系:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
nvidia-docker2 : 依赖: docker-ce (= 18.03.1~ce~3-0~ubuntu) 但是它将不会被安装
或docker-ee (= 18.03.1~ee~3-0~ubuntu) 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

原因:docker和nvidia-docker2以及Ubuntu系统版本不对应的原因,卸载所有docker,重新安装正确的版本。

方法:

查看对应的版本命令:

apt-cache madison nvidia-docker2 nvidia-container-runtime

 找到合适的版本安装:安装命令【使用的Ubuntu16.04内核版本是4.15.0-72-generic,但后面降级了,但好像有没有降成功】

sudo apt-get install -y nvidia-docker2=2.0.3+docker18.06.3-3 nvidia-container-runtime=2.0.0+docker18.06.3-3

4、错误4:

执行docker run命令时报错

Error response from daemon: oci runtime error: container_linux.go:346: starting container process caused "process_linux.go:

还是docker和Ubuntu内核版本问题,卸载docker重装。升级内核或者降级docker。

升级内核:https://blog.csdn.net/u013431916/article/details/82530523

sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak【备份一下源文件(因为待会要替换掉,以免以后找不到)】

sudo vim /etc/apt/sources.list【修改文件】

在里面最后一行加入deb http://security.ubuntu.com/ubuntu trusty-security main,并保存(:wq)

sudo apt-get update【更新】

sudo apt-get install linux-image-extra-3.16.0-43-generic【找到想安装的内核版本,安装新内核】

dpkg -l | grep 3.16.0-43-generic【查看是否安装成功】

sudo vim /etc/default/grub【编辑grub配置文件,指定新安装的内核版本为当前使用的版本】

找到

GRUB_DEFAULT=0

修改为:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.16.0-43-generic"

sudo update-grub【保存退出,然后执行以下命令更新 Grub 引导】

sudo reboot【更新完成后重启系统】

uname -r【查看一下是否更换成功】

5、错误5:

执行命令sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi报错:

docker: Error response from daemon: Unknown runtime specified nvidia.

原因:没有将docker启动

方法:

sudo systemctl daemon-reload
sudo systemctl restart docker

 

 
原文地址:https://www.cnblogs.com/Lee-yl/p/12121337.html