Docker windows 的桌面在 search/build 上使用公司代理失败
Docker Desktop for windows fails on search/build with corporate proxy
我已经为 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 的 "Proxies" 设置中,我为 HTTP 和 HTTPS 设置了 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 "Automatic" 和手动(使用我公司的 DNS 服务器)
None 有效。
关于我应该做什么的任何提示?
谢谢。
一位同事发现了问题:
默认情况下,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
(例如)。它应该能够连接到互联网并获取图像。
重要提示:从现在开始,一些需要访问互联网的命令将需要使用额外参数--network="docker_gwbridge"
[=指定新的docker网络20=]
例如 docker 构建命令可以是:
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,因此如果此选项不起作用,您可以考虑原始答案。
我已经为 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 的 "Proxies" 设置中,我为 HTTP 和 HTTPS 设置了 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 "Automatic" 和手动(使用我公司的 DNS 服务器)
None 有效。
关于我应该做什么的任何提示?
谢谢。
一位同事发现了问题:
默认情况下,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
(例如)。它应该能够连接到互联网并获取图像。
重要提示:从现在开始,一些需要访问互联网的命令将需要使用额外参数--network="docker_gwbridge"
[=指定新的docker网络20=]
例如 docker 构建命令可以是:
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,因此如果此选项不起作用,您可以考虑原始答案。