我正在尝试从具有多个代理的服务器中提取图像。
设置适当的代理服务器取决于机器尝试从哪个区域docker pull
。
作为记录,在要提取图像的计算机的/etc/systemd/system/docker.service.conf/http-proxy.conf
中添加一个相关代理,工作正常。
但是应该将容器下载到多个区域,这些区域根据计算机的位置需要不同的代理。
我尝试了两件事:
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
当然,如果我只为配置提供第二个工作代理,它将起作用。
docker pull
中一样,将代理作为参数传递给docker build/run
,但是根据文档不支持。我正在寻找一种以这种方式设置代理的方法
Docker退回尝试其他提供的替代代理
OR
我可以在拉动时动态提供代理。 (这将是自动过程的一部分,该过程确定要通过的相关代理。)
出于明显的原因,我不想不断更改http-proxy文件并重新启动docker。
我有什么选择?
答案 0 :(得分:0)
如果您使用的是较新的docker(即17.07及更高版本),则可以在客户端进行此配置。有关配置的详细信息,请参考官方documentation。
对于所需的各种代理配置,您仍然需要具有多个配置文件,但是您无需重新启动docker守护程序即可切换它们。
为了执行类似的操作(与代理不完全相关),我使用了一个Shell脚本,该脚本通过--config
选项包装指向自定义配置文件的Docker客户端的调用。