我正在windows上运行停靠程序(OS: MicrosoftWindows10Pro64bit,docker : 18.09.0,Build4d60db4),方法是遵循hello-world指令这里。然后,我得到了以下“服务器错误行为”错误:
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp: lookup <companyProxy> on 192.168.65.1:53: server misbehaving.我试图按照建议的这里将DNS (在Docker设置- Network服务器中)从自动更改为固定(8.8.8.8或8.8.4.4),但仍未解决问题,并导致另一种类型的错误(“超时超出”)。
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).我支持公司的代理,并且已经在环境变量和码头设置上设置了代理(和凭据)。我也试图重新安装两个码头和hyperV,但仍然遇到同样的问题。
有人能帮忙吗?谢谢
发布于 2018-11-27 07:21:32
我认为,上一次配置中的超时是由于您没有通过代理到这些外部DNS服务器(8.8.8.8 - 8.8.4.4)。
您应该解决第一个问题,即server misbehaving。与我的情况一样,提到了这里,这是由于码头无法使用代理进行身份验证造成的。我的解决方案是使用cntml。
如果您遵循cntlm的指导原则,那么它的配置实际上是非常简单的。在运行cntlm时,需要配置docker,以将其用作代理而不是公司代理。只是一个没有身份验证的普通代理--很可能是127.0.0.1:3128,如果您在同一台机器上运行它的话。cntlm将处理公司代理上的身份验证。
作为参考,这是我使用的cntlm配置:
Username <username>
Domain <domain>
Password <password>
PassLM <PassLM output of cntlm -H>
PassNT <PassNT output of cntlm -H>
PassNTLMv2 <PassNTLMv2 output of cntlm -H>
Proxy <corporate proxy>:<corporate proxy port>
NoProxy localhost, 127.0.0.*, 10.*, 192.168.*, 172.16.*.*
Listen 3128您可以通过运行cntlm -H -u <username>@<domain>获得哈希。
确保您在网关模式cntlm -g (而不是cntlm -v)中运行cntlm。
祝好运!
发布于 2020-02-07 06:44:05
在将Docker从版本17升级到最新的19 (目前为19.03.5)之后,我们在Linux上出现了这个问题。
# 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 http on 1.2.3.4:53: server misbehaving.1.2.3.4是我们DNS服务器的IP,它本身工作得很好--我可以解析不同的主机,也可以解析来自Docker的registry-1.docker.io。
解决方案
问题在于我们如何在/etc/systemd/system/docker.service.d/http-proxy.conf中全局设置代理。因为它是一个MS AD用户,所以它包含了domain\user格式的用户名,如下所示:
[Service]
Environment="HTTP_PROXY=http://domain\user:password@proxyserver.internal:80"HTTPS_PROXY也是如此。虽然这在版本17上有效,但是它似乎不适用于19,现在反斜杠似乎会引起问题。就这样把它移走吧:
[Service]
Environment="HTTP_PROXY=http://user:password@proxyserver.internal:80"如何检查这是否是一个问题
因为我们跳过了18,所以我不确定这是在19版还是在18版中发生了变化,但是如果您升级到18或19,我会检查一下。有一种简单的方法可以解决这个问题:
docker info | grep -i proxy如果你看到这样的审查凭证
HTTP Proxy: http://xxxxx:xxxxx@proxyserver.internal:80
HTTPS Proxy: http://xxxxx:xxxxx@proxyserver.internal:80那你就不会受到这个问题的影响。但是,如果您看到普通的凭据,Docker无法解析它们,因为反斜杠或者可能包含在env变量中的其他特殊字符。
发布于 2018-11-30 01:50:39
我已经接受了上面的答案,但是,由于一个未知的原因,问题在几天后再次出现,有一个稍微不同的错误。幸运的是,我成功地使用了不同的设置来解决这个问题,如下所示。希望当被接受的答案不起作用时,它能帮助到某人。
首先,发生此错误的条件: CNTLM侦听127.0.0.1:3128,坞代理(通过图形用户界面设置)为127.0.0.1:3128,既适用于HTTP,也适用于HTTPS。
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp 10.0.75.1:3128: connect: connection refused我检查了这个相似案例,但是这个解决方案对我也不起作用。我尝试了几种不同的方法,包括关闭防火墙,复制初始问题(我最初的问题),以及重做接受的解决方案,但都没有效果。我意识到错误中显示的IP地址不是我的公司代理,也不是Cntlm侦听端口,也不是我的本地主机,而是dockerNAT的IP。
然后,我还注意到,在运行CNTLM -g -v时,在Cntlm ready, staying in the foreground行下面运行docker pull hello-world (在另一个终端中)时,什么都不会出现。
受这个答案的启发,我尝试将Cntlm.ini和对接器上的代理设置更改为10.0.75.1:3128,然后重新启动cntlm和docker。现在情况略有变化。错误消息更改为:
Error response from daemon: Get https://registry-1.docker.io/v2/: Parent proxy unreacheable而Cntlm终端现在显示了一些东西,当我点击码头拉命令,表明它以某种方式工作。我怀疑代理主机名在这个阶段可能会导致问题,因为docker可能无法从VM访问DNS服务器。然后我再次更改了Cntlm.ini,将代理的主机名更改为它的IP地址,瞧,现在docker pull hello-world正常工作了!
(TBH我不完全理解为什么这个解决方案起作用的网络理论。如果有人能给出一些解释,那将是有帮助的。)
https://stackoverflow.com/questions/53475168
复制相似问题