前言
按照gpt给的流程安装docker,到docker run hello-world
时不绝失败,试了一下直接拉取docker资源docker pull xxx 还是不可,看了一下别的帖子都说需要换源,但很多docker源都失效了,为了方便后续自己再安装换源记录一下,只想看怎么换源的可以直接跳到第2部分
一、docker 安装
以下步骤由gpt生成,亲测步骤10之前都没题目
1: 更新体系包
首先,打开终端并更新你的包索引:
- sudo apt update
- sudo apt upgrade -y
复制代码 2: 安装必要的依赖
安装一些必要的包,以便让 apt 能够通过 HTTPS 使用仓库:
- sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
复制代码 3: 添加 Docker 的官方 GPG 密钥
运行以下下令来添加 Docker 的 GPG 密钥:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
复制代码 4: 添加 Docker 的 APT 仓库
添加 Docker 的稳定版仓库:
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
复制代码 5: 更新包索引
再次更新包索引以包罗 Docker 的软件包:
6: 安装 Docker
如今,你可以安装 Docker:
- sudo apt install docker-ce -y
复制代码 7: 启动 Docker 服务
确保 Docker 服务正在运行:
- sudo systemctl start docker
- sudo systemctl enable docker
复制代码 8: 验证 Docker 是否安装成功
你可以通过以下下令检查 Docker 是否安装成功:
9: 以非 root 用户运行 Docker(可选)
如果你希望以非 root 用户运行 Docker,可以将当前用户添加到 docker 组:
- sudo usermod -aG docker $USER
复制代码 使用以下下令立即应用更改:
!!!!!注意:这种方式单次有效,下次再运行docker还是必须用sudo
想永久有效的方式是在输入sudo usermod -aG docker $USER
指令后立即输入sudo reboot对体系进行重启!!!
重启之后打开终端验证是否设置成功,输出中应当包罗docker:
10: 测试 Docker
运行以下下令来测试 Docker 是否工作正常:
二 、docker pull 失败,提示timeout
重要是网络题目,需要换源
1. 打开/新建/etc/docker/daemon.json文件
- sudo nano /etc/docker/daemon.json
复制代码 2. 将最新的docker源地址粘贴进去,并将更改后的文件保存
- { "registry-mirrors": [ "https://dockerpull.com" ] }
复制代码 Ctrl + O保存,Enter确认保存,Ctrl + X退出nano
注意:由于docker源常常更新,请自行检索确认可用网址,下面的github链接是比较全面的docker源网址汇总,可以在这内里找。 https://github.com/dongyubin/DockerHub
3. 应用更改并重启docker
- sudo systemctl daemon-reload #重载systemd管理守护进程配置文件
- sudo systemctl restart docker #重启 Docker 服务
复制代码 4.重新测试
得到如下结果,大功告成!!!
三、构建docker存储空间不足
运行完上述测试后在docker build xxx的时候报错:InvalidArchiveError,No space left on device,提示存储空间不足
首先检查磁盘空间使用情况
得到如下结果:
docker默认情况下会占用根分区的存储空间,也就是上图/dev/nvme0n1p10,显示剩余8.9G,空间不足,两种办理方法。
1. 清算Docker 镜像和容器
- docker system prune -a # 删除所有未使用的镜像、悬挂的卷和停止的容器
复制代码 2. 将 Docker 存储目次移动到 /home 分区
编辑/etc/docker/daemon.json文件,添加如下内容:
- {
- "data-root": "/home/docker-data"
- }
复制代码 终极该文件内容如下:
- {
- "registry-mirrors": [ "https://dockerpull.com" ] ,
- "data-root": "/home/docker-data"
- }
复制代码 像第二部分1~3步一样保存更改并重启docker,再重新构建你所需的docker
四、运行容器
1. 查看刚刚构建好的docker 镜像
得到结果如下体现构建成功:
2. 用构建的镜像来启动一个新的容器
- docker run --gpus all -it -v /home/cslearner/PycharmProjects/tdmpc2-main:/app cslearner/tdmpc2:1.0.0 /bin/bash
- # 将cslearner/tdmpc2:1.0.0 替换成你的镜像名+TAG
复制代码 /home/PycharmProjects/tdmpc2-main:/app体现将主机上/home/PycharmProjects/tdmpc2-main目次的内容挂载到容器/app 目次
不消GPU的话可以将--gpus all去掉,还有就是/bin/bash体现进入容器的交互式终端,可以执行下令及脚本文件。
但是这步加了gpu之后报错了,如下:
- docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
复制代码 原因是没装NVIDIA Container Toolkit
- distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
- curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
- curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
复制代码 执行上述指令后在终端看到下图,是/etc/apt/sources.list.d/nvidia-docker.list文件中的内容,但是这里生成的网址有些已经弃用了,以是需要修改
打开文件
- sudo nano /etc/apt/sources.list.d/nvidia-docker.list
复制代码 修改文件内容如下:
- deb https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
- #deb https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /
复制代码 之后再
我在sudo apt-get update
之后发现还有错误,一个是W: 目标 CNF (stable/cnf/Commands-all) 在 /etc/apt/sources.list:58 和 /etc/apt/sources.list.d/docker.list:1 中被配置了多次,我首先是把sources.list文件内里和docker.list重复的部分注释掉了,然后把docker.list内里的源也换掉,如下:
- deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu focal stable
复制代码 之后又报错http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease 连接失败 [IP: 185.125.190.83 80],我再次打开sources.list,把http://security.ubuntu.com/ubuntu全删除了,更换成国内源如下:
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security universe
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security multiverse
复制代码 这个时候再重启一下docker
- sudo systemctl restart docker
- docker run --gpus all -it <user>/tdmpc2:1.0.0 /bin/bash
复制代码 看到下图,成功!此中root@背面的一串15d32f77ff51是容器的ID
3. 检查待执行脚本所需的情况是否安装好(python)
- python --version
- conda list
复制代码 输入conda list 之后又得到报错:Error while loading conda entry point: conda-libmamba-solver (libarchive.so.19: cannot open shared object file: No such file or directory),原因是conda 缺少了依赖库libarchive.so.19,在docker中执行以下下令来安装:
- apt-get update
- apt-get install -y libarchive-dev
复制代码 再次出现W: Failed to fetch ,需要换源,在docker中打开/etc/apt/sources.list文件,删除全部,然后更换成:
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
- deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
复制代码 再重新执行上面的安装libarchive的下令,成功后输入conda list 查看是否还有错误
4. 运行脚本
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |