docker不能使用系统代理

我正在尝试使用公司防火墙后面的docker。

在这里输入图像说明

我想强制docker使用系统代理,但是这个选项是不可用的。 如何使docker到系统代理。

在这里输入图像说明

我写了一篇关于使用奇怪的DummyDesperatePoitras虚拟交换机作为CNTLM的锚点的博客文章,并解决了我在这里提到的一些问题(在每次IP更改时都必须更改Docker的代理地址等):

http://mandie.net/2017/12/10/docker-for-windows-behind-a-corporate-web-proxy-tips-and-tricks/

截至2017年11月,该function在Docker for Windows中仍未实现: https : //github.com/docker/for-win/issues/589

我find的最好的解决scheme是CNTLM,但我不喜欢它,因为:

1)CNTLM在5年内没有更新

2)您必须在Docker GUI中设置代理IP,使其非常自动化。 Docker for Windows GUI从MobyLinux虚拟机中读取代理设置,而不是从Windowsregistry,configuration文件或Windows环境variables中读取代理设置。 在Windows中设置HTTP_PROXY和HTTPS_PROXY对Docker完全没有影响。 我还没有find任何方式设置代理值编程方式; MobyLinux虚拟机不接受SSH连接。 如果有人从命令行或脚本中find一种方法,我很想知道。

3)将代理IP设置为127.0.0.1将不起作用,因为这将使Docker 真正运行的虚拟机尝试自己的接口,而不是运行CNTLM的主机上的接口。 我也尝试了DockerNAT接口IP 10.0.75.1,但没有成功。

4)这意味着代理IP需要是活动外部networking接口的当前IP地址。 如果你在build筑物周围移动很多,每次你想使用Docker时都需要检查一下。

  • 将CNTLM设置为在0.0.0.0 3128上进行监听,而不仅仅是3128或127.0.0.1 3128.这样可以节省您每次PC获取新IP地址时更新此IP地址的麻烦。 只要有端口号,就可以保持运行Docker的虚拟机的stream量不被“听到”。
  • 计算NTLMv2散列并将其存储在configuration文件中,而不是用户名和密码。 这对每个PC和用户帐户都会有所不同,所以不要将您的未经编辑的configuration文件与另一台PC共享,除非您想locking。 当您下次更改Windows密码时,您将需要更新此存储的散列。
  • 对其configuration文件进行任何更改后,重新启动cntlm Windows服务。
  • 在cmd.exe或PowerShell中运行ipconfig来查找您当前的IP地址。 如果您使用企业VPN,请使用WiFi或以太网适配器的IP地址,而不是VPN。
  • 在“Web服务器(HTTP)”框中键入http:// ipfromipconfig:3128 / 。 确保checkbox“两个使用相同”被选中。

你可以设置两个环境variableshttp_proxy和https_proxy

http_proxy的值为http:// username:password @ proxyIp:proxyport

例如,在我的情况下,它是http:// venkat_krish:password@something.ad.somthing.com:80

你可以使用相同的HTTPS代理

注意:

如果您有任何与_&不同的特殊字符。 在用户名或密码你必须编码的url。 请按照此链接进行url编码https://grox.net/utils/encoding.html

例如,如果你的密码是abc @ 123,那么它将被写为abc%40123