1

発信 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 を使用しています。

ありがとう!

4

1 に答える 1

3

あなたがまだこの情報を必要としているかどうかはわかりません。同様の現象が見られましたが、Docker をアップグレードすることで解決されました。

問題の原因がわからないため、少し調べてみたところ、次のことがわかりました。

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

簡単に言えば、ipv4 に対して同じことを試みる前に、ipv6 dns を解決しようとする docker と関係があります。読んでください。あなたは私よりもそれをよく理解しているかもしれません。

お役に立てば幸いです。

于 2016-09-09T16:14:49.737 に答える