红帽系统中运行docker run遇到的nvidia-docker-plugin相关的错误:
在ubuntu x86_64下做好的docker镜像,使用docker save保存为tar文件,复制文件到另一台红帽REHL7.X x86_64设备上,运行docker run遇到以下错误:
nvidia-docker-plugin | 2018/01/12 00:56:15 Received create request for volume 'nvidia_driver_367.48'
nvidia-docker-plugin | 2018/01/12 00:56:15 Error:
link /usr/bin/nvidia-cuda-mps-control /var/lib/nvidia-docker/volumes/nvidia_driver/367.48/bin/nvidia-cuda-mps-control: invalid cross-device link
docker: Error response from daemon: create nvidia_driver_367.48: VolumeDriver.Create: internal error, check logs for details.
See 'docker run --help'.
这个过程好像是nvidia-docker-plugin在/var/lib/nvidia-docker/volumes/nvidia_driver/367.48/目录下创建指向/usr/bin/nvidia-cuda-mps-control的"硬链接"。而跨文件系统是不可以创建硬链接的,REHL这台设备可能和ubuntu下的环境不太一样。
解决办法如下:
从我的ubuntu的设备上把/var/lib/nvidia-docker/volumes/nvidia_driver/367.48/目录复制到REHL系统中,重新docker run,一切OK了。如果相关路径的上层目录不存在,先创建完整的目录mkdir -p /var/lib/nvidia-docker/volumes/nvidia_driver/367.48/
题外话:上述方法是尝试过的最终方法,中间尝试过使用为
nvidia-cuda-mps-control创建软连接。虽然可以启动docker run,也可以进入到docker中,但是在docker中import tensorflow时发现找不到libcuda.so.1。错误如下:
ImportError: libcuda.so.1: cannot open shared object file: No such file or directory
之前测试过的镜像,开始怀疑是docker镜像损坏了,但是经过比对docker镜像没有问题,但是在docker中确实找不到这个库。我的镜像在之前开发的ubuntu上是好的,在ubuntu下运行的容器中可以看到/usr/local/nvidia/lib64/目录下看到libcuda.so.1,在REHL中运行的容器看不到这个目录,一度怀疑人生了。后来发现docker容器中/usr/local/nvidia/的目录就是host系统中的/var/lib/nvidia-docker/volumes/nvidia_driver/367.48/目录。所以要把缺少的整个目录拷贝过来。
注意:不同的nvidia驱动版本对应不同的目录,注意修改
367.48