Docker GPU 镜像运行失败:nvidia-container-cli: /sbin/ldconfig.real: no such file or directory: unknown
·
一、问题背景与报错
1.1 背景
想为基于python的算法打包镜像,该算法需要使用GPU。
使用的基础镜像:docker.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04
附带pull基础镜像命令与链接:
命令:docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04
链接:docker.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04 - 镜像下载 | docker.io
python版本:python 3.8
1.2 报错
docker run -d --gpus all <镜像id> 时报错
docker: Error response from daemon: failed to create shim task: OCI runtime create failed:
nvidia-container-cli: ldcache error: open failed: /sbin/ldconfig.real: no such file or directory: unknown.
docker run -d <镜像id> 去除指定gpu可正常运行容器
并且
1) 把nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04基础镜像更换为nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04不行;
2)在dockerfile中 ln -s /sbin/ldconfig /sbin/ldcondig.real;(gpt教的)不行
二、问题原因以及解决方法
2.1 问题原因
不是镜像问题,而是宿主机 Docker 引擎没有配置 nvidia runtime
cat /etc/docker/daemon.json
如果 /etc/docker/daemon.json 里没有如下字段,GPU容器就run不起来
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
2.2 解决方法
将该字段加入/etc/docker/daemon.json
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
三、本次 Docker 镜像构建基础流程
3.1 生成requirement.txt依赖文件
anaconda 配置环境
生成依赖文件
pip freeze > requirements.txt
3.2 编写Dockerfile
# 1. 使用 CUDA devel 镜像(带完整工具链,支持 GPU)
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04
# 2. 设置非交互模式
ENV DEBIAN_FRONTEND=noninteractive
# 3. 安装 Python3.8 和常用依赖
RUN apt-get update && \
apt-get install -y --no-install-recommends \
python3.8 \
python3.8-dev \
python3.8-venv \
curl \
build-essential \
libgl1-mesa-glx \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgomp1 \
libtbb2 \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libavformat-dev \
libpq-dev && \
rm -rf /var/lib/apt/lists/*
# 4. 安装 pip/setuptools/wheel
RUN curl -sS https://bootstrap.pypa.io/pip/3.8/get-pip.py | python3.8 && \
python3.8 -m pip install --no-cache-dir --upgrade pip setuptools wheel
# 5. 设置 Python3.8 为默认
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 && \
update-alternatives --set python3 /usr/bin/python3.8 && \
ln -sf /usr/bin/python3.8 /usr/bin/python && \
ln -sf /usr/local/bin/pip /usr/bin/pip
# 6. 设置工作目录
WORKDIR /app
# 7. 复制 requirements.txt 并安装 Python 依赖
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 8. 复制项目代码
COPY . ./
# 9. 暴露端口
EXPOSE xxxx
# 10. 启动服务
CMD ["python", "run.py"]
3.3 构建镜像
docker build -t name:version .
# 示例
docker build -t sort:v1 .
3.4 运行容器以及相关命令
# 运行镜像
docker run -d --gpus all -p xxxx:xxxx <镜像id>
# 查看所有镜像
docker images
# 查看所有容器
docker ps -a
#停止容器
docker stop <容器id>
#删除容器
docker rm <容器id>
#删除镜像
docker rmi <镜像id>
其他问问gpt
四、下载官方 nvidia/cuda
通过github下载
更多推荐


所有评论(0)