Docker Windows 7 上的 VM 主机在企业代理之后无法联系代理或更广泛的互联网

Docker VM host on Windows 7 behind corporate proxy cannot contact proxy or wider internet

欢迎来到另一种略有不同的风格 "docker-machine behind corporate proxy"。

相当确定这不是对这个主题领域的其他问题的完全重复,我花了大量时间尝试在这里找到的其他潜在解决方案,但没有有用,但由于我完全被难住了,我们开始吧...

症状:

root@default:/home/docker# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: 
proxyconnect tcp: dial tcp: lookup dev-webaccess on 10.0.2.3:53: no such host.
See 'docker run --help'.

这看起来像是在尝试在 VM 内解析我的代理 (dev-webaccess) 但失败了。 似乎我也无法 ping 通虚拟机之外的任何东西。 感觉这是 VM 中的网络配置错误,因为流量无法流出,但我不确定到底是什么问题。

我是怎么来到这里的:

  1. 使用 VirtualBox + NDIS6 驱动程序在 Windows 7 上安装 Docker Toolbox 18.03.0-ce
  2. 将代理环境变量添加到 Docker 工具箱的 start.sh,由 Docker 快速启动终端使用:

  3. 启动快速启动终端。这似乎很顺利: 代理详细信息也将其放入默认机器的 config.json 中:

  4. 然后,在执行 eval $(docker-machine env default) 之后,我们可以通过 ssh 进入默认机器:

  5. 然后如果我们尝试 docker run hello-world,乐趣就开始了:

这是 routedefault-machine 中的输出:

所以,最后,问题来了:此处显示的代理或网络配置是否有任何内容可以解释为什么流量无法从 virtualbox default-machine 流出到我的代理和更广泛的互联网? 看起来,通过我的非网络眼睛,好像流量试图离开 VM eth0 并且根本无法去任何地方。

如果有人告诉我我是个白痴,我会很高兴错过了一些非常明显的东西...

我似乎已经解决了这个问题,尽管我不能假装确切地知道这解决了它的原因。实际上有点令人惊讶,只是我在这里读到的一个凄凉的 "I'll try anything at this point" 变化 https://github.com/docker/machine/issues/2418

C:\Users\user.name\.docker\machine\machines\default\config.json 我有以下内容:

"HostOptions": {
    "Driver": "",
    "Memory": 0,
    "Disk": 0,
    "EngineOptions": {
        "ArbitraryFlags": [],
        "Dns": null,
        "GraphDir": "",
        "Env": [
            "HTTP_PROXY=http://user.name:password@dev-webaccess:8080",
            "HTTPS_PROXY=https://user.name:password@dev-webaccess:8080"
        ],

我刚刚删除了显式协议(http://、https://),做了 docker-machine provision default 瞧!我的虚拟机像梦一样工作:

"HostOptions": {
    "Driver": "",
    "Memory": 0,
    "Disk": 0,
    "EngineOptions": {
        "ArbitraryFlags": [],
        "Dns": null,
        "GraphDir": "",
        "Env": [
            "HTTP_PROXY=user.name:password@dev-webaccess:8080",
            "HTTPS_PROXY=user.name:password@dev-webaccess:8080"
        ],

如果有人能解释为什么这被证明是解决方法,我很想知道。