将应用程序从主机移动到docker会使HTTP滞后时间增加5秒

我有一个应用程序,我注意到做出传出的HTTP请求时(5秒的额外延迟)performance不好。 通过大量的试验/testing,我意识到,将Docker外部的应用程序移动到主机中消除了奇怪的HTTP延迟。

我正在使用高山linux作为docker镜像,而ubuntu正在托pipe父机器。

Docker信息:

Docker版本1.11.2,build b9f10c9

"NetworkSettings": { "Bridge": "", "SandboxID": "3ab81b8a66a99c6e9b1a1f49c5410d8260db37eee96c9231c0d83c1b40f84fa5", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "8084/tcp": null }, "SandboxKey": "/var/run/docker/netns/3ab81b8a66a9", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "464acfb299941bbd301051ea05451823a7e527161185570c00f8569ce2afde88", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:03", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "32ebc75bc4c98106c6775905906723405c58bc3de914283234a8e1273cba7193", "EndpointID": "464acfb299941bbd301051ea05451823a7e527161185570c00f8569ce2afde88", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:03" } } } 

我没有任何幻想地运行docker集装箱:

 docker run -d test 

我的代码(Python)时间需要多长时间的整个请求周期:

 now = datetime.now() response = http.request('POST', url, body=request_body, headers=headers) print( "\nTotal Time: ", (datetime.now() - now).total_seconds() ) 

恒定的时间是5-6秒,在容器外面,不到一秒钟。

我做了一次钻取来检查容器内的DNS和tcpdump。 从那里报告似乎没有什么有趣的。 DNS看起来很好,数据包捕获报告0.2秒的请求时间。

我从数据包捕获中发现的唯一有趣的事情是,从http.request被调用时开始看到数据包的开始需要5秒钟的时间。

我确信在这里有一个dockernetworkingconfiguration错误。 请让我知道是否有任何更多的信息,我需要添加。 我们正在使用泊坞窗20其他服务没有这个问题。

谢谢!

我不知道你是否仍然需要这些信息。 我们已经看到类似的东西,通过升级Docker解决了这个问题。

不知道问题的原因使我做了一点挖掘,我发现这一点:

https://github.com/docker/docker/issues/20661

简而言之,在试图对ipv4执行相同操作之前,docker试图parsingipv6 dns。 有一个阅读。 你可能比我更了解它。

我希望它可以帮助你。