上个月听说 dockerhub 解封了,然而今天实测只是墙抽风了。

然后国内的镜像大都也不能用了,一些私人的镜像站感觉也不太靠谱,只能挂代理了。

docker pull 代理配置

需要注意的是,很多教程都说设置 HTTP_PROXY 和 HTTPS_PROXY 两个环境变量,实测根本没用。

还有说修改 ~/.docker/config.json 文件的,也是不靠谱,这个是指配置运行容器的环境,跟 pull image 没有半毛钱关系。

想让 docker pull 走代理,得修改 /etc/docker/daemon.json 这个配置文件。

PS:如果这个文件不存在,就创建一下。

文件内容如下(IP和端口需要修改成你自己的代理地址信息):

{
    "proxies": {
        "http-proxy": "http://IP:PORT",
        "https-proxy": "http://IP:PORT",
        "no-proxy": "*.cn,*.aliyun.com,*.aliyuncs.com,*.163.com,*.baiduce.com,*.qiniu.com,*.daocloud.io,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10"
    }
}

修改配置后重启 Docker 服务,让配置生效:

service docker restart

为什么修改 Docker Daemon 的配置?

这是因为 Docker CLI 只是一个客户端,只是负责给 Docker Daemon 传递信息,实际的工作是由 Docker Daemon 完成的。

所以在执行 docker pull image:tag 时,docker cli 将 pull 的命令传递给了 Docker Daemon,然后由 Docker Daemon 进程来拉取镜像,并将结果返回。

如果只是设置 shell 的环境变量,那么确实是对 docker cli 有效,但对 daemon 进程不起作用。

我的服务器上无法安装代理服务,怎么办呢?

可以将你本地主机的 clash 之类的代理服务共享给服务器,使用 ssh -R 命令即可,详细信息可以参考这篇文章 将本地的 HTTP Proxy 共享给阿里云服务器

如果你的端口设置为 7890,那么上面 daemon.json 配置文件的内容修改为:

{
    "proxies": {
        "http-proxy": "http://127.0.0.1:7890",
        "https-proxy": "http://127.0.0.1:7890",
        "no-proxy": "*.cn,*.aliyun.com,*.aliyuncs.com,*.163.com,*.baiduce.com,*.qiniu.com,*.daocloud.io,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10"
    }
}

就可以了。

PS: 修改后别忘了重启 docker 服务,不然配置不生效哦。

标签: proxy, docker

添加新评论