适用于Windows的Docker桌面在使用公司代理进行搜索/构建时失败

时间:2019-03-22 14:15:34

标签: windows docker proxy docker-desktop

我已经为Windows Docker version 18.09.2, build 6247962安装了Docker Desktop,但无法构建和镜像。甚至docker search似乎也不起作用。

错误消息(例如,在执行docker search时)为:

Error response from daemon: Get https://index.docker.io/v1/search?q=ubuntu&n=25: proxyconnect tcp: dial tcp 172.17.14.133:3128: connect: no route to host

我的办公室在代理后面。因此,在DockerDesktop的“代理”设置上,我同时为HTTP和HTTTPS设置了http://172.17.14.133:3128。但这似乎仍然行不通。

我已经定义了一些ENV变量(用户和系统),如下所示:

HTTPS_PROXY=http://proxypmi.tradyso.com:3128
HTTP_PROXY=http://proxypmi.tradyso.com:3128

也:

C:\Users\my.user\AppData\Roaming\Docker\http_proxy.json

{
  "http": "http://172.17.14.133:3128",
  "https": "http://172.17.14.133:3128",
  "exclude": null,
  "transparent_http_ports": [],
  "transparent_https_ports": []
}

C:\Users\my.user\AppData\Roaming\Docker\settings.json

{
  "settingsVersion": 1,
  "autoStart": false,
  "checkForUpdates": true,
  "analyticsEnabled": false,
  "displayedWelcomeWhale": true,
  "displayed14393Deprecation": false,
  "displayRestartDialog": true,
  "displaySwitchWinLinContainers": true,
  "latestBannerKey": "",
  "debug": false,
  "memoryMiB": 2048,
  "swapMiB": 1024,
  "cpus": 2,
  "diskPath": null,
  "diskSizeMiB": 64000000000,
  "networkCIDR": "10.0.75.0/24",
  "proxyHttpMode": true,
  "overrideProxyHttp": "http://172.17.14.133:3128",
  "overrideProxyHttps": "http://172.17.14.133:3128",
  "overrideProxyExclude": null,
  "useDnsForwarder": true,
  "dns": "10.44.24.10",
  "kubernetesEnabled": false,
  "showKubernetesSystemContainers": false,
  "kubernetesInitialInstallPerformed": false,
  "cliConfigCreationDate": "03/22/2019 12:23:58",
  "linuxDaemonConfigCreationDate": "03/22/2019 12:22:19",
  "windowsDaemonConfigCreationDate": null,
  "versionPack": "default",
  "sharedDrives": {},
  "executableDate": "",
  "useWindowsContainers": false,
  "swarmFederationExplicitlyLoggedOut": false,
  "activeOrganizationName": null,
  "exposeDockerAPIOnTCP2375": false
}

C:\Users\my.user\.docker\config.json

{
  "stackOrchestrator": "swarm",
  "auths": {},
  "credsStore": "wincred",
  "proxies":
  {
    "default":
    {
      "httpProxy": "http://172.17.14.133:3128",
      "httpsProxy": "http://172.17.14.133:3128",
      "noProxy": ""
    }
  }
}

我还尝试将build-arg传递给tocker build

docker build --build-arg HTTP_PROXY=http://172.17.14.133:3128 --build-arg HTTPS_PROXY=http://172.17.14.133:3128 ...

最后,在Docker桌面网络配置上,我尝试使用“自动”和“手动”(使用公司的dns服务器)的DNSs

所有这些都没有起作用。

关于我该怎么办的任何提示?

谢谢。

1 个答案:

答案 0 :(得分:1)

一个同事发现了问题所在:

默认情况下,docker创建的网桥网络使用与我们办公室相同的子网(172.17.0.0/16),这会导致代理ip地址(172.17.14.133)出现问题。

要解决此问题:

无法删除桥接网络,但是我们可以告诉docker不要创建它。

转到“守护程序设置,高级=>将"bridge": "none",添加到配置

应用更改后,Docker将重新启动,现在我们将能够创建自己的自定义网桥网络

在此示例中,我们将使用(172.19.0.0/16)

打开控制台并输入:

docker network create --subnet=172.19.0.0/16 --gateway 172.19.0.1 -o com.docker.network.bridge.enable_icc=true -o com.docker.network.bridge.name=docker_gwbridge -o com.docker.network.bridge.enable_ip_masquerade=true docker_gwbridge

然后我们可以执行docker ls来检查上一个命令是否成功:

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
2a3635a49ffa        docker_gwbridge     bridge              local
4e9ec758ee9f        host                host                local
737c6c5fc82b        none                null                local

现在执行docker search ubuntu(例如)。它应该能够连接到互联网并获取图像。

重要:从现在开始,一些需要Internet访问的命令将需要使用额外的参数--network="docker_gwbridge"指定新的docker网络

例如,一个docker build命令可以是:

docker build --network="docker_gwbridge" --build-arg http_proxy=http://172.17.14.133:3128 --build-arg https_proxy=http://172.17.14.133:3128 -t foobar .

[编辑] :使用更简单的方法,请执行以下操作:

在守护程序配置中,添加"bip": "new_subbet"。例如:"bip": "172.19.0.1/16"。然后,重新启动docker。

现在,您甚至不需要将额外的--network="docker_gwbridge"参数传递给命令。

这个较短的解决方案可能不适用于Windows的较旧版本的Docker,因此,如果此选项不起作用,您可以考虑原始答案。