为 docker pull 配置 http proxy,加速下载 image
上个月听说 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 服务,不然配置不生效哦。