动态为docker pull设置代理

时间:2020-09-11 09:41:16

标签: docker proxy

我正在尝试从具有多个代理的服务器中提取图像。

设置适当的代理服务器取决于机器尝试从哪个区域docker pull

作为记录,在要提取图像的计算机的/etc/systemd/system/docker.service.conf/http-proxy.conf中添加一个相关代理,工作正常

但是应该将容器下载到多个区域,这些区域根据计算机的位置需要不同的代理。

我尝试了两件事:

  1. 像这样通过了http-proxy.conf中的代理列表:
[Service]
Environment="HTTP_PROXY=http://proxy_1:port/,http://proxy_2:port/"
Environment="HTTPS_PROXY=http://proxy_1:port/,http://proxy_2:port/"
Environment="NO_PROXY=localhost"

某些机器需要http://proxy_1:port/,才能正常工作。

但是在需要http://proxy_2:port/拉动的机器上;它确实有效,这意味着Docker不会退回到另一个代理进行尝试。它返回此错误:

Error response from daemon: Get HTTP:<ip>:<proxy_1> proxyconnect tcp: dial tcp <ip>:<proxy_1>: connect: no route to host

当然,如果我只为配置提供第二个工作代理,它将起作用。

  1. 像在docker pull中一样,将代理作为参数传递给docker build/run,但是根据文档不支持。

我正在寻找一种以这种方式设置代理的方法

Docker退回尝试其他提供的替代代理

OR

我可以在拉动时动态提供代理。 (这将是自动过程的一部分,该过程确定要通过的相关代理。)

出于明显的原因,我不想不断更改http-proxy文件并重新启动docker。

我有什么选择?

1 个答案:

答案 0 :(得分:0)

如果您使用的是较新的docker(即17.07及更高版本),则可以在客户端进行此配置。有关配置的详细信息,请参考官方documentation

对于所需的各种代理配置,您仍然需要具有多个配置文件,但是您无需重新启动docker守护程序即可切换它们。

为了执行类似的操作(与代理不完全相关),我使用了一个Shell脚本,该脚本通过--config选项包装指向自定义配置文件的Docker客户端的调用。