【已解决】docker安装、换源及使用 docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

文章目录

  • 前言
  • [一、docker 安装](#一、docker 安装)
  • [二 、docker pull 失败,提示timeout](#二 、docker pull 失败,提示timeout)
      • [1. 打开/新建/etc/docker/daemon.json文件](#1. 打开/新建/etc/docker/daemon.json文件)
      • [2. 将最新的docker源地址粘贴进去,并将更改后的文件保存](#2. 将最新的docker源地址粘贴进去,并将更改后的文件保存)
      • [3. 应用更改并重启docker](#3. 应用更改并重启docker)
      • 4.重新测试
  • 三、构建docker存储空间不足
      • [1. 清理Docker 镜像和容器](#1. 清理Docker 镜像和容器)
      • [2. 将 Docker 存储目录移动到 /home 分区](#2. 将 Docker 存储目录移动到 /home 分区)
  • 四、运行容器
      • [1. 查看刚刚构建好的docker 镜像](#1. 查看刚刚构建好的docker 镜像)
      • [2. 用构建的镜像来启动一个新的容器](#2. 用构建的镜像来启动一个新的容器)
      • [3. 检查待执行脚本所需的环境是否安装好(python)](#3. 检查待执行脚本所需的环境是否安装好(python))
      • [4. 运行脚本](#4. 运行脚本)

前言

按照gpt给的流程安装docker,到docker run hello-world时一直失败,试了一下直接拉取docker资源docker pull xxx 还是不行,看了一下别的帖子都说需要换源,但很多docker源都失效了,为了方便后续自己再安装换源记录一下,只想看怎么换源的可以直接跳到第2部分


一、docker 安装

以下步骤由gpt生成,亲测步骤10之前都没问题

1: 更新系统包

首先,打开终端并更新你的包索引:

bash 复制代码
sudo apt update
sudo apt upgrade -y

2: 安装必要的依赖

安装一些必要的包,以便让 apt 能够通过 HTTPS 使用仓库:

bash 复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

3: 添加 Docker 的官方 GPG 密钥

运行以下命令来添加 Docker 的 GPG 密钥:

bash 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4: 添加 Docker 的 APT 仓库

添加 Docker 的稳定版仓库:

bash 复制代码
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

5: 更新包索引

再次更新包索引以包含 Docker 的软件包:

bash 复制代码
sudo apt update

6: 安装 Docker

现在,你可以安装 Docker:

bash 复制代码
sudo apt install docker-ce -y

7: 启动 Docker 服务

确保 Docker 服务正在运行:

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

检查docker状态:

bash 复制代码
sudo systemctl status docker

8: 验证 Docker 是否安装成功

你可以通过以下命令检查 Docker 是否安装成功:

bash 复制代码
sudo docker --version

9: 以非 root 用户运行 Docker(可选)

如果你希望以非 root 用户运行 Docker,可以将当前用户添加到 docker 组:

bash 复制代码
sudo usermod -aG docker $USER

使用以下命令立即应用更改:

bash 复制代码
newgrp docker

!!!!!注意:这种方式单次有效,下次再运行docker还是必须用sudo
想永久有效的方式是在输入sudo usermod -aG docker $USER指令后立即输入sudo reboot对系统进行重启!!!

重启之后打开终端验证是否设置成功,输出中应当包含docker:

python 复制代码
groups $USER

10: 测试 Docker

运行以下命令来测试 Docker 是否工作正常:

bash 复制代码
docker run hello-world

二 、docker pull 失败,提示timeout

主要是网络问题,需要换源

1. 打开/新建/etc/docker/daemon.json文件

powershell 复制代码
sudo nano /etc/docker/daemon.json 

2. 将最新的docker源地址粘贴进去,并将更改后的文件保存

powershell 复制代码
 { "registry-mirrors": [ "https://dockerpull.com" ] }

Ctrl + O保存,Enter确认保存,Ctrl + X退出nano

注意:由于docker源经常更新,请自行检索确认可用网址,下面的github链接是比较全面的docker源网址汇总,可以在这里面找。 https://github.com/dongyubin/DockerHub

3. 应用更改并重启docker

powershell 复制代码
sudo systemctl daemon-reload #重载systemd管理守护进程配置文件
sudo systemctl restart docker #重启 Docker 服务

4.重新测试

powershell 复制代码
docker run hello-world

得到如下结果,大功告成!!!


三、构建docker存储空间不足

运行完上述测试后在docker build xxx的时候报错:InvalidArchiveError,No space left on device,提示存储空间不足

首先检查磁盘空间使用情况

powershell 复制代码
df -h

得到如下结果:

docker默认情况下会占用根分区的存储空间,也就是上图/dev/nvme0n1p10,显示剩余8.9G,空间不足,两种解决方法。

1. 清理Docker 镜像和容器

powershell 复制代码
docker system prune -a  # 删除所有未使用的镜像、悬挂的卷和停止的容器

2. 将 Docker 存储目录移动到 /home 分区

编辑/etc/docker/daemon.json文件,添加如下内容:

powershell 复制代码
{
  "data-root": "/home/docker-data"
}

最终该文件内容如下:

powershell 复制代码
 { 
 "registry-mirrors": [ "https://dockerpull.com" ] ,
 "data-root": "/home/docker-data"
 }

像第二部分1~3步一样保存更改并重启docker,再重新构建你所需的docker

powershell 复制代码
docker bulid xxx

四、运行容器

1. 查看刚刚构建好的docker 镜像

powershell 复制代码
docker images

得到结果如下表示构建成功:

2. 用构建的镜像来启动一个新的容器

powershell 复制代码
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之后报错了,如下:

powershell 复制代码
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

原因是没装NVIDIA Container Toolkit

  • 添加添加 NVIDIA 的 GPG 密钥和仓库
powershell 复制代码
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文件中的内容,但是这里生成的网址有些已经弃用了,所以需要修改

打开文件

powershell 复制代码
sudo nano /etc/apt/sources.list.d/nvidia-docker.list

修改文件内容如下:

powershell 复制代码
deb https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
#deb https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /

之后再

powershell 复制代码
sudo apt-get update

我在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里面的源也换掉,如下:

powershell 复制代码
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全删除了,替换成国内源如下:

powershell 复制代码
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

powershell 复制代码
sudo systemctl restart docker
docker run --gpus all -it <user>/tdmpc2:1.0.0 /bin/bash

看到下图,成功!其中root@后面的一串15d32f77ff51是容器的ID

3. 检查待执行脚本所需的环境是否安装好(python)

powershell 复制代码
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中执行以下命令来安装:

powershell 复制代码
apt-get update
apt-get install -y libarchive-dev

再次出现W: Failed to fetch ,需要换源,在docker中打开/etc/apt/sources.list文件,删除全部,然后替换成:

powershell 复制代码
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. 运行脚本

powershell 复制代码
python /app/script.py
相关推荐
鸡鸭扣1 小时前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
是小崔啊3 小时前
java网络编程02 - HTTP、HTTPS详解
java·网络·http
人工干智能4 小时前
科普:“Docker Desktop”和“Docker”以及“WSL”
运维·docker·容器
落笔画忧愁e4 小时前
FastGPT及大模型API(Docker)私有化部署指南
运维·docker·容器
一天八小时4 小时前
Docker学习进阶
学习·docker·容器
前端没钱4 小时前
前端需要学习 Docker 吗?
前端·学习·docker
Logout:4 小时前
[AI]docker封装包含cuda cudnn的paddlepaddle PaddleOCR
人工智能·docker·paddlepaddle
Blasit5 小时前
C++ Qt建立一个HTTP服务器
服务器·开发语言·c++·qt·http
2301_793069827 小时前
HTTP 和RESTful API 基础,答疑
网络协议·http·api·restful