発信 HTTP 要求を行うときにパフォーマンスが悪いことに気付いたアプリがあります (5 秒の余分な遅延)。試行錯誤を繰り返した結果、docker の外にあるアプリをホスト マシンに移動すると、奇妙な HTTP ラグが解消されることがわかりました。
docker イメージに alpine linux を使用しており、ubuntu が親マシンをホストしています。
ドッカー情報:
Docker バージョン 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コンテナを実行しました:
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 秒で、コンテナの外では 1 秒未満です。
コンテナ内から DNS と tcpdump を確認するドリルを行いました。そこから報告するのは興味深いものではないようです。DNS は正常に見え、パケット キャプチャは 0.2 秒の要求時間を報告します。
パケット キャプチャからわかった唯一の興味深い点は、http.request が呼び出されてからパケットの先頭を確認するのに 5 秒かかったということです。
ここのどこかに docker ネットワークの設定ミスがあると確信しています。追加する必要がある情報があれば教えてください。この問題なしで、他の 20 のサービスに docker を使用しています。
ありがとう!