我正在尝试在公司防火墙后面使用 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 月,此功能仍未在 Docker for Windows 中实现:https ://github.com/docker/for-win/issues/589
我发现的最佳解决方案是 CNTLM,但我对此并不满意,因为:
1) CNTLM 5 年未更新
2)您必须在 Docker GUI 中设置代理 IP,使其相当抗自动化。Docker for Windows GUI 从 MobyLinux VM 读取代理设置,而不是从 Windows 注册表、配置文件或 Windows 环境变量中读取。在 Windows 中设置 HTTP_PROXY 和 HTTPS_PROXY 对 Docker 完全没有影响。我还没有找到任何以编程方式设置代理值的方法;MobyLinux VM 不接受 ssh 连接。如果有人找到从命令行或脚本执行此操作的方法,我很想知道。
3) 将代理 IP 设置为 127.0.0.1 将不起作用,因为这将使 Docker真正运行的虚拟机尝试自己的接口,而不是主机 PC 上运行 CNTLM 的虚拟机。我也试过DockerNAT接口IP,10.0.75.1,没有成功。
4) 这意味着代理 IP 需要是您活动的外部网络接口的当前 IP 地址。如果您经常在建筑物周围移动,则每次要使用 Docker 时都需要检查这一点。
使用 CNTLM 可以自动在代理后面工作。它允许我们在没有任何凭据的情况下指定任何地方的 IP 地址,因此安全性更好,每当我们更改密码时,我们只需在一个地方进行,我们还可以指定不应被代理的 URL。从 18.03 Docker 版本开始,有可用的特殊 DNS 名称:host.docker.internal
. 这允许从 Docker 容器连接到主机。现在,当我们在 cntlm.ini 中设置 CNTLM 代理以使其监听时0.0.0.0:3128
:
Listen 0.0.0.0:3128
然后我们可以使用host.docker.internal:3128
地址在 Docker 设置代理中指定,该地址将被转换为我们机器的适当和当前本地地址。
你可以设置两个环境变量 http_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