2016-06-17 14 views
1

我有一個應用程序,當發出傳出的HTTP請求(額外的5秒延遲)時,我注意到它的性能很差。通過大量的試驗/測試,我意識到將Docker外部的應用程序移動到主機中消除了奇怪的HTTP延遲。將應用程序從主機移動到docker將HTTP滯後時間增加了5秒

我使用高山linux作爲docker鏡像,並且ubuntu正在託管父機器。

泊塢窗信息:

泊塢版本1.11.2,構建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 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秒鐘。

我確信這裏有一個碼頭網絡配置錯誤。請讓我知道是否有任何更多信息需要添加。我們正在使用docker for 20其他服務沒有這個問題。

謝謝!

+0

邁克爾很可能發現了DNS,你提到這是你自己的懷疑。比較容器內部和外部的/etc/resolv.conf。 – BMitch

回答

3

我不知道你是否仍然需要這些信息。我們已經看到類似的東西,通過升級Docker解決了這個問題。

不知道這個問題的原因導致我做一個小挖,我發現這一點:

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

簡而言之,它是與碼頭工人試圖解決一個IPv6 DNS在嘗試爲ipv4做同樣的事情之前。讀一讀。你可能比我更瞭解它。

我希望它能幫助你。

相關問題