Skip to content

Docker的代理 ​

国内相关的docker代理均被ban了,所以需要自己搭建代理,可以借助于serverless功能, 白嫖cloudflare这个互联网大善人。

推荐给本地的dockerd守护进程配置使用网络代理。

不建议使用cloudflare来代理Docker Hub。

cloudflare已经更新了条款,不再允许借助CDN来作为代理服务使用,有封号的风险。

cloudflare已经更新了条款,不再允许借助CDN来作为代理服务使用,有封号的风险。

cloudflare已经更新了条款,不再允许借助CDN来作为代理服务使用,有封号的风险。

dockerd配置代理 ​

bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

然后编辑文件/etc/systemd/system/docker.service.d/proxy.conf,写入以下内容(其中的代理地址请使用自己的网络代理配置),保存更改后重启Docker。

textfile
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

Docker Hub 代理 ​

参考 https://github.com/cmliu/CF-Workers-docker.io :

  1. 先注册一个cloudflare 账户,使用免费的订阅计划(Free plan)。
  2. 进入cloudflare dashboard -> 账户主页 -> 开发人员平台 -> 创建应用程序 -> pages 。
  3. 这个时候二选一:
    1. 如果fork了上面的github repo, 那就使用 连接到git ,一步一步按照流程, 部署fork的repo;
    2. 或者 复制 _work.js 的代码, 直接部署;
  4. 等待部署完成后, 会有一个cloudflare域(名),使用该域名(也可以设置pages的自定义域,使用自己个人的域名来指向这个代理)可以直接访问,显示的是docker hub的搜索框, 此时代理步骤完成。

docker pull 使用代理 ​

最简单的方式是在pull的镜像名称前加上域名:docker pull 代理域名/镜像名称:镜像标签

还可以配置docker的repo mirror, 编辑/etc/docker/daemon.json文件:

json
{  
  "registry-mirrors": ["https://代理域名/"]  
}

然后重启docker , 执行docker info查看registries信息,是否为代理的域名。

docker build使用代理 ​

在build命令中增加参数--build-arg http_proxy=http://代理地址 --build-arg https_proxy=http://代理地址

或者修改文件~/.docker/config.json, 此修改对docker run、docker build生效:

json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://代理地址",
     "httpsProxy": "http://代理地址",
     "noProxy": "localhost,127.0.0.1"
   }
 }
}

修改后,如果不想在容器中使用代理, 将容器中环境变量(http_proxy、https_proxy)设置为空即可。

需要注意的是代理地址需要根据容器使用的网络模式(host、bridge)来变动。