首页 > 其他分享 >docker 报错

docker 报错

时间:2023-08-21 21:11:14浏览次数:60  
标签:libcuda linux so.1 报错 nvidia libnvidia docker

问题说明:我是服务器上面的docker拉到本地30卡想用的,但是失败,报错如下: 服务器上面显存驱动是450,本地30卡驱动是470

nvidia-docker run -it --name 20230821_3 --shm-size 16g -p 10029:22 --privileged 20230821_img bash
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #1: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: device error: GPU-18275fc2-f525-f872-0355-f0c386cc0de3: unknown device: unknown.

https://blog.csdn.net/weixin_43135178/article/details/131416191

故障原因:
nvidia-docker最古老的容器内nvidia gpu的调用是需要在镜像(或容器)中安装与宿主机nvidia显卡驱动兼容的驱动版本,但是这一要求比较难以满足,因为如果宿主机的nvidia驱动略低于docker容器下nvidia驱动版本就很容易出现forward compatibility错误,而比较可行的就是容器内的nvidia驱动版本略低于宿主机版本。正是因为最早的nvidia-docker这个难以保证宿主机和容器的nvidia驱动版本匹配,因此现在的nvidia-docker使用的方案是在制作docker镜像时不安装nvidia driver和cuda,而是在nvidia-docker容器启动时自动把宿主机中的nvidia driver和cuda映射给容器,对应的nvidia-docker启动容器时附加参数为 --gpus all,但是有一些人对这个原理并不是很了解因此在制作镜像的时候依旧会把nvidia driver和cuda打包进去【应该是在做镜像的时候不应该把--gpus all参数加进去】。由于wsl下对物理机的nvidia显卡是使用模拟的方式,这时的wsl中使用的nvidia驱动其实是wsl-nvidia-driver,也正是由于该驱动的一些特性导致在wsl中如果使用nvidia-docker启动自身带有nvidia driver和cuda的容器就会在启动时报错。其报错的故障具体点为wsl使用nvidia-docker启动容器时在自动创建/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1文件和/usr/lib/x86_64-linux-gnu/libcuda.so.1文件时会判断镜像中是否有相同的文件,如果有则报错,也就是本文开头说提的报错信息,而在ubuntu物理机上使用nvidia-docker首次启动容器时即使镜像中存在/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1文件和/usr/lib/x86_64-linux-gnu/libcuda.so.1文件也会对其进行强制覆盖(强制映射)(该种覆盖并不会影响容器的保存,比如在使用docker commit时对应的文件依旧是原镜像中的文件,而不是nvidia-docker映射给的宿主机中对应的文件)。

简单来说就是显卡驱动版本一致的docker才能用!
服务器上面的docker, nvidia-docker进不去,需要用
docker run -it --name my yhl_20230821_img:latest /bin/bash
才能进去

root@e990c35cc59b:/# nvidia-smi
root@e990c35cc59b:/# cd /usr/lib/x86_64-linux-gnu/
root@e990c35cc59b:/usr/lib/x86_64-linux-gnu# ls libnvidia*
libnvidia-allocator.so.1           libnvidia-cfg.so.450.102.04       libnvidia-fatbinaryloader.so.418.67  libnvidia-ml.so.455.23.05       libnvidia-ptxjitcompiler.so.1
libnvidia-allocator.so.450.102.04  libnvidia-cfg.so.455.23.05        libnvidia-ml.so                      libnvidia-opencl.so.1           libnvidia-ptxjitcompiler.so.418.67
libnvidia-allocator.so.455.23.05   libnvidia-compiler.so.418.67      libnvidia-ml.so.1                    libnvidia-opencl.so.418.67      libnvidia-ptxjitcompiler.so.450.102.04
libnvidia-cfg.so.1                 libnvidia-compiler.so.450.102.04  libnvidia-ml.so.418.67               libnvidia-opencl.so.450.102.04  libnvidia-ptxjitcompiler.so.450.80.02
libnvidia-cfg.so.418.67            libnvidia-compiler.so.455.23.05   libnvidia-ml.so.450.102.04           libnvidia-opencl.so.455.23.05   libnvidia-ptxjitcompiler.so.455.23.05
root@e990c35cc59b:/usr/lib/x86_64-linux-gnu# ls libcuda*
libcuda.so  libcuda.so.1  libcuda.so.418.67  libcuda.so.450.102.04  libcuda.so.450.80.02  libcuda.so.455.23.05
root@e990c35cc59b:/usr/lib/x86_64-linux-gnu# 

可以看到这个是显卡驱动是450版本或者455

但是我本地可以用的其他的docker进去,看到是470版本的

root@9af74680a946:/# cd /usr/lib/x86_64-linux-gnu/
root@9af74680a946:/usr/lib/x86_64-linux-gnu# ls libnvidia*
libnvidia-allocator.so.1           libnvidia-cfg.so.1           libnvidia-compiler.so.470.103.01  libnvidia-ml.so.470.103.01  libnvidia-opencl.so.470.103.01  libnvidia-ptxjitcompiler.so.465.19.01
libnvidia-allocator.so.470.103.01  libnvidia-cfg.so.470.103.01  libnvidia-ml.so.1                 libnvidia-opencl.so.1       libnvidia-ptxjitcompiler.so.1   libnvidia-ptxjitcompiler.so.470.103.01
root@9af74680a946:/usr/lib/x86_64-linux-gnu# ls libcuda*
libcuda.so  libcuda.so.1  libcuda.so.465.19.01  libcuda.so.470.103.01
root@9af74680a946:/usr/lib/x86_64-linux-gnu# 


标签:libcuda,linux,so.1,报错,nvidia,libnvidia,docker
From: https://www.cnblogs.com/yanghailin/p/17647100.html

相关文章

  • 将.NET应用程序容器化与Docker
    当谈到现代软件开发和部署方法时,Docker已经成为一个备受欢迎的工具。它为开发人员和运维团队提供了一种简单而有效的方法,将应用程序及其依赖项打包到一个称为容器的独立单元中。在本篇博客中,我们将探讨如何将.NET应用程序容器化使用Docker。什么是Docker?Docker是一种容器化平......
  • Docker-compose
    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 目录一、简介 二、compose三层三、compose文件系统四、yml格式五、compose命令六、compose部署七、总结        一、简介 1.compose背景我们知道使......
  • Docker-Compose
    目录一、Docker-Compose简介二、YAML文件格式及编写注意事项三、数据及结构1.对象映射2.序列数组3.布尔值4.示例四、DockerCompose配置常用字段五、DockerCompose常用命令六、DockerCompose文件结构七、DockerCompose环境部署1.下载2.安装3.查看版本八、DockerC......
  • docker使用的核心技术
    1.cgroup,这个用来限制cpu和内存;(通过改配置文件,让pid的cpu和内存限制在配置文件里指定的大小) 2.namespace,这个用来隔离进程/文件系统等等;(unshare-m-u/bin/bash,那么当前session就是在一个namespace里了,在这里修改hostname和加载iso文件,是不会影响宿主机的;注意:不止有-m-u还有......
  • docker compose install debian
    在Debian上安装DockerCompose需要遵循以下步骤:确保您的系统已经安装了Docker。安装Python和pip:sudoapt-getupdatesudoapt-getinstallpython3python3-pip使用pip安装DockerCompose:sudopip3installdocker-compose证DockerCompose是否安装成功:docker-......
  • docker ubuntu20.04 安装教程
    ubuntu20.04安装docker教程本博客测试安装时间2023.8月一、docker安装内容:dockerEngine社区版和dockerCompose二、安装环境:ubuntu20.04三、安装步骤:#如果已经安装过docker,请先卸载,没安装则跳过forpkgindocker.iodocker-docdocker-composepodman-dockercontai......
  • 当字符串中含有%,先使用 encodeURI 进行编码,再使用decodeURI解码报错
    报错原因:decodeURI不允许参数有%,它会自动把%25转义为%,这个转义后的%导致的报错解决方法一在解码decodeURI之前将%替换为%25编码:url=encodeURI(encodeURI(url));解码:url=url.replaceAll("%","%25");url=decodeURI(decodeURI(url));解决方法二在编码encodeURI之前就将%......
  • 跨版本迁移数据报错tables declared WITH OIDS are not supported
    瀚高数据库目录环境症状问题原因解决方案环境系统平台:Linuxx86-64RedHatEnterpriseLinux7版本:6.0症状迁移数据还原数据库时报错ERROR:tablesdeclaredWITHOIDSarenotsupported问题原因Postgresql12后取消了OIDS=TRUE的用法。解决方案修改脚本中的语句脚本中出现OIDS=T......
  • 报错注入
    什么是报错注入?报错注入是一种页面响应形式。响应过程如下:用户在前台页面输入检索内容 ↓后台将前台页面上输入的检索内容无加区别的拼接成sql语句,送给数据库执行↓数据库将执行的结果返回给后台,后台将数据库执行的结果无加区别的显示到前......
  • dockerfile搭建activemq5.16.5
    dockerfile搭建activemq5.16.5搭建环境最小化的centos7.5家目录下完成如下操作环境构建脚本#!/bin/bash#authorbygwl###2023-02-10docker安装配置yuminstallwgetntpdatetelnetvimnet-toolsbash-completiongccgcc-c++make-ysed-i.bak's/SELINUX=enfor......