nvidia-docker安装过程中各种报错的解决流程. 以及GPT回答的docker教程.
nvidia-docker安装使用
一篇CSDN blog https://blog.csdn.net/qq_41776453/article/details/129794608
另一片关于墙内下载的CSDN https://blog.csdn.net/Yonggie/article/details/140460258
由于前面已经满足了前置条件:
- 有显卡及nvidia驱动
nvidia-smi
- 安装好了docker.
docker ps -a
于是找了个教程 https://blog.csdn.net/qq_41776453/article/details/129794608 , 上面说需要先获取一个密钥, 然后正常 apt-get
. 运行命令行
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ |
大战EOF报错
遇到了如下报错
1 | docker: Error response from daemon: Get "https://nvcr.io/v2/": EOF. |
排查了一下发现应该是网络链接的问题. 有可能是命令没有走代理端口导致的, 也可能是没有成功配置密钥导致无法登陆这个网站. 也有可能是代理抽风导致出现问题.
配置代理端口
尝试让docker走代理.
按照
https://blog.csdn.net/qq_30034989/article/details/132021346
的方法, 给dockerd 设置了代理端口.
创建配置文件 (配置名为 *.conf
即可)
1 | sudo mkdir -p /etc/systemd/system/docker.service.d |
添加环境变量
1 | [Service] |
重新载入配置, 并重启docker
1 | sudo systemctl daemon-reload |
无效.
猜想可能是代理本身就出问题了, 今天不知道为什么节点大面积失效. 在浏览器上开google也很慢. 代理软件正常工作的情况下, 这个方法应该是有效的.
配置国内镜像源
在配置了代理后, 偶尔能够正常下载, 但下载过程中很慢, 而且不稳定, 时不时就会中途崩掉. 应该是我的代理软件的问题, 如果有稳定的代理在上一步就可以停下不用折腾了.
总之现在尝试配置国内镜像源, 在关闭代理的情况下完成下载.
根据两篇blog:
配置教程 https://xuanyuan.me/blog/archives/1154
可用镜像源 https://bbs.huaweicloud.com/blogs/440690
1 | sudo mkdir -p /etc/docker |
此处原始blog中给出的命令行有一段是错误的, 第二行mirror后面不能有逗号.
如果按照错误的命令行编写配置, 运行后就会发现无法正常reload和restart. 报错
1 | Job for docker.service failed because the control process exited with error code. |
此处已经更改过来, 上面给出的是正确的文件内容.
(tee命令用于向文件内写入内容. 猜想直接使用 nano / gedit 也是一样的效果. )
总之是配置好了一大堆镜像源, 未见成效. 显示报错为
1 | Error response from daemon: Head "https://nvcr.io/v2/nvidia/pytorch/manifests/24.07-py3": Get "https://nvcr.io/proxy_auth?scope=repository%3Anvidia%2Fpytorch%3Apull": EOF |
尝试把之前的代理配置取消掉. 这下工作正常了.
目前已知的情况就是, 在关掉代理, 同时配置docker pull 走代理的情况下, 会报错; 而在关掉代理, 同时取消pull走代理的配置, 且配置好镜像源的情况下, 可以正常工作. 不知道取消掉镜像源能不能正常工作.
墙内搞这些东西是真麻烦啊. 搞代理软件会遇到一堆问题, 什么ping不通, 虚拟机端口和本机不一样之类的; 配置国内镜像源又是另一堆麻烦事. 由于对网络这块一窍不通, bug还很难de.
总之, 在配置好 docker 和nvidia之后运行
1 | sudo docker pull nvcr.io/nvidia/pytorch:24.07-py3 |
下载镜像.
镜像包含了pytroch等环境, 所以量级在几十G左右, 非常大, 需要耐心等待.
下载完毕后, 运行容器
1 | docker run --runtime=nvidia -it --rm --shm-size="10g" --cap-add=SYS_ADMIN -v $PWD:/openrlhf nvcr.io/nvidia/pytorch:24.07-py3 bash |
发现还是一样的报错
1 | docker: Error response from daemon: unknown or invalid runtime name: nvidia. |
查找了一下, 找到了一篇教程 https://developer.baidu.com/article/details/2805250
大致是要安装 nvidia-container-runtime
1 | `sudo apt-get install nvidia-container-runtime` |
然后改一个配置文件/etc/docker/daemon.json
1 | { |
之后再运行容器就可以正常运作了.
GPT回答:
Docker 使用教程
Docker 是一个开源的容器化平台,用于创建、部署和运行应用程序容器。以下是详细的 Docker 教程,包括安装、基本命令和使用示例。
一、安装 Docker
1. 在 Ubuntu 上安装 Docker
1 | sudo apt update |
注:添加到
docker
组后需重新登录。
2. 在 Windows 和 macOS 上安装 Docker
- 前往 Docker 官方网站:Docker Desktop
- 下载并安装适合系统的 Docker Desktop。
二、Docker 基本概念
- 镜像 (Image):用于创建容器的模板,类似于虚拟机的快照。
- 容器 (Container):镜像的运行实例,可以理解为一个轻量级的、独立的运行环境。
- Dockerfile:定义镜像构建过程的脚本文件。
- Docker Hub:官方提供的镜像仓库。
三、常用 Docker 命令
在 Docker 中,可以通过 --name
选项为容器指定一个自定义的名字。命名容器的语法如下:
1 | docker run --name <container_name> [其他选项] <image_name> <命令> |
例如,如果你想给容器命名为 my_pytorch_container
,可以像这样运行命令:
1 | docker run --name my_pytorch_container --runtime=nvidia -it --rm --shm-size="10g" --cap-add=SYS_ADMIN -v $PWD:/openrlhf nvcr.io/nvidia/pytorch:24.07-py3 bash |
--name my_pytorch_container
:为容器指定了一个名字my_pytorch_container
。- 容器名可以是任何你想要的字符串,但必须遵循 Docker 容器命名规则:
- 容器名只能包含字母、数字、连字符(
-
)和下划线(_
)。 - 容器名不能包含空格或特殊字符(如
/
,:
,?
等)。 - 容器名可以有多个单词,通常使用连字符(
-
)来分隔。
- 容器名只能包含字母、数字、连字符(
通过命名容器,你可以更容易地通过名字来管理容器,而不是每次都使用容器 ID。例如,你可以用容器的名字来停止、启动、查看日志等操作:
1 | docker stop my_pytorch_container # 停止容器 |
如果不指定容器名,Docker 会自动为容器生成一个随机的名字。
1. 镜像操作
1 | docker pull <镜像名> # 下载镜像 |
示例:
1 | docker pull ubuntu:20.04 # 下载 Ubuntu 20.04 镜像 |
2. 容器操作
1 | docker run <选项> <镜像名> # 运行容器 |
示例:
1 | docker run -it ubuntu:20.04 bash # 启动一个交互式的 Ubuntu 容器并进入 bash |
3. 容器与主机目录挂载
1 | docker run -v /主机路径:/容器路径 <镜像名> |
示例:
1 | docker run -v ~/data:/app/data ubuntu |
4. Dockerfile 构建镜像
创建一个名为 Dockerfile
的文件:
1 | FROM ubuntu:20.04 |
构建镜像:
1 | docker build -t my-python-image . |
5. 网络管理
1 | docker network ls # 查看所有网络 |
四、Docker Compose
Docker Compose 用于定义和运行多容器应用。
- 创建
docker-compose.yml
文件:
1 | version: '3' |
- 启动服务:
1 | docker-compose up |
- 停止服务:
1 | docker-compose down |
五、常见 Docker 用途
- 部署 Web 应用:
- 使用 Nginx、Apache 容器作为 Web 服务器。
- 数据库服务:
- 使用 MySQL、PostgreSQL 等数据库镜像。
- 开发环境隔离:
- 在容器中运行 Python、Node.js 等开发环境。