下载docker镜像

国内无法正常从官方网址docker pull拉取镜像

有以下几种方法可以使用:

使用镜像站

例如本来要执行docker pull nginx:latest

在地址前面添加镜像站地址:docker pull docker.1ms.run/nginx:latest

当然这个镜像站不一定存了最新的镜像,可以去网址上搜索看一下版本:https://1ms.run/

配置http代理

修改docker daemon配置文件设置代理,但是这种方法需要重启docker服务,不适用于多人共用服务器场景

首先为docker创建systemd配置目录:

1
sudo mkdir -p /etc/systemd/system/docker.service.d

创建或编辑配置文件:

1
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

添加以下内容:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"

重载systemd配置并重启docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

使用skopeo配合代理下载镜像为tar

默认docker是不支持直接下载成tar文件的,但是我们可以用skopeo下载

这种方法的好处是不需要重启docker,只需要下载tar文件然后load就可以了

缺点是skopeo是单线程串行拉取的,比较慢,docker pull是并行拉取的,不过网络不好的情况下,串并行区别不大

安装:sudo apt install skopeo

先查看一下镜像信息:skopeo --debug inspect docker://lmsysorg/sglang:dev

1
2
3
4
5
6
7
export http_proxy="....."
export https_proxy="....."

skopeo copy \
    --debug \
    docker://lmsysorg/sglang:dev \
    docker-archive:./sglang-dev.tar:lmsysorg/sglang:dev
  • lmsysorg/sglang:dev 就是你要拉取的地址
  • sglang-dev.tar 就是你要保存的tar文件名

下载完成后,可以先ll查看一下tar文件体积是否符合预期

然后就可以sudo docker load -i sglang.tar加载镜像了