如何使用 socks5 代理制作 docker-compose 拉取镜像?

如何使用 socks5 代理制作 docker-compose 拉取镜像?

我正在尝试通过 socks5 代理提取图像。我已在端口上启动了 socks5 代理,8888如下所示:

ssh -NC -D 8888 parham@***.***.**

但是,当我docker-compose这样运行时,很明显它没有使用环境变量:

$ ALL_PROXY=socks5://127.0.0.1:8888 docker-compose up

我如何让 Docker 通过这个代理拉取镜像?

答案1

看起来这个功能已经最近已添加到docker,特别是在 版本 中1.11.0。虽然没有足够的文档介绍其用法,但ALL_PROXY根据此评论

$ export ALL_PROXY=socks5://localhost:port 
$ docker pull image

我目前还不确定docker-compose。如果你的主要目的是使用 socks5 加速下载过程,那么docker pull在最终运行之前,你也许可以通过使用 手动拉取图像来实现目的docker-compose up

答案2

方法 1

错误:

docker-compose up 
Pulling web (jitsi/web:stable-6433)...
ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

然后设置HTTP_PROXY如下HTTPS_PROXY

export HTTP_PROXY=socks5://localhost:9040/
export HTTPS_PROXY=socks5://localhost:9040/

结果:

docker-compose up 
Pulling web (jitsi/web:stable-6433)...
stable-6433: Pulling from jitsi/web
b380bbd43752: Downloading [===================>                               ]  10.36MB/27.14MB
0312863d422f: Download complete
503063a74a58: Downloading [============================>                      ]  7.998MB/14.15MB
392a862abfe3: Download complete
41a073b705ed: Download complete
a8f4844f6941: Download complete
f500f1f2f4ae: Downloading [============>                                      ]  11.69MB/47.56MB

HTTP_PROXY设置前后的照片:

在此处输入图片描述

方法 2

如果方法 1 不起作用(简单方法),你可以使用这个

第一的

查找 systemd 配置的位置:

systemctl status docker | grep docker.service\;
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

对于我的 Debian 9 来说这里是/lib/systemd/system/docker.service并且它的目录是/lib/systemd/system/
So cdinto /lib/systemd/system/

第二

mkdirdocker.service.d

mkdir docker.service.d && cd !$

第三

docker.service.d目录中创建一个.conf文件,如下:http-代理配置文件

向前

添加这些http-代理配置文件文件:

[Service]
Environment="HTTP_PROXY=socks5://localhost:9040"
Environment="HTTPS_PROXY=socks5://localhost:9040"

注意这localhost:9040是我的,如果你有不同的 IP 或端口,请更新它

第五

因为我们更新配置运行:

systemctl daemon-reload

然后重启docker服务

systemctl restart docker

现在它已启动并运行:

在此处输入图片描述

答案3

@nikhilweee 的上述回答缺少一个关键点。

用于镜像拉取的代理取自 的环境dockerd。目前无法在不重启 的情况下更改它dockerd

我已经提交moby 问题 #37335关于它,因为我想对单个拉取命令使用特定的代理,但一般情况下不是。

答案4

在Docker 17.07及更高版本中,您还可以使用json文件进行代理配置:

       $ vim ~/.docker/config.json

          {
            "proxies":
              {
                "default":
                 {
                  "httpProxy": "http://127.0.0.1:8118",
                  "httpsProxy": "http://127.0.0.1:8118"
                  }
              }
          }

        $  docker pull ubuntu:18.04
        $  docker-compose build

更多的官方文档中的信息。

除了使用之外Socks,您还可以 使用以下方式Socks转发:HTTPprivoxy

    $ sudo apt install -y privoxy
    $ sudo vim /etc/privoxy/config
    
              forward-socks5 / 127.0.0.1:9090  .
              forward-socks4a / 127.0.0.1:9090 .
              forward-socks5t             /     127.0.0.1:9090 .
              forward         192.168.*.*/     .
              forward            10.*.*.*/     .
              forward           127.*.*.*/     .
              forward           localhost/     .
    
    $ sudo service privoxy restart

更多的官方文档中的信息。

相关内容