簡體   English   中英

Docker 容器與主機網絡的網絡性能非常慢

[英]Very slow network performance of Docker containers with host's network

我遇到了 Docker 容器和主機網絡之間網絡性能緩慢的問題。 我在 Docker 的論壇上問過這個問題,但到目前為止還沒有收到任何答案。

問題

設置:同一本地網絡上的兩台 Mac; 第一個運行 MQTT 代理(mosquitto); 第二個運行 Docker for Mac。 兩個 C++ 程序在第二台 Mac 上運行,並使用 Paho MQTT C 庫通過 MQTT 代理(在第一台 Mac 上)多次交換數據。

原生運行:當我原生運行這兩個C++程序時,網絡性能如預期般出色。 這些程序是用 XCode 7.3 構建的。

Docker 運行:當我在 Docker 中運行一個或兩個 C++ 程序時,網絡性能急劇下降,大約比本機運行慢 30 倍。 Docker 鏡像基於 ubuntu:latest,程序由 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609 構建。

我嘗試使用主機網絡(Docker 運行中的 --network="host" ),但沒有幫助。 我還嘗試在第二台 Mac 上運行 MQTT 代理(以便代理和容器在同一主機上運行); 問題仍然存在。 我的工作局域網和家庭網絡都存在此問題。

理論上,可能是 C++ 程序在 Docker 容器中通常很慢。 但我懷疑情況是否如此,因為根據我的經驗,C++ 代碼在 Docker 中的總體性能與在本機環境中一樣快。

問題

這個問題的原因可能是什么? Docker 中是否有任何設置可以解決此問題?

我懷疑容器的默認內存和 CPU 分配對於您嘗試實現的網絡性能可能不是最佳的。

  1. 使用標准工具(如 top、htop、strace 等)調查容器內資源的利用率。或者,當這些實例處於運行高峰期時,您可以使用 docker stat 命令$ docker stats node1 node2 CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O node1 0.07% 796 KB/64 MB 1.21% 788 B/648 B node2 0.07% 2.746 MB/64 MB 4.29% 1.266 KB/648 B
  2. 然后,您可能希望修改 docker run 可用的各種資源分配參數。 在此處輸入圖片說明

    1. 編輯:要檢查的另一件事是實際系統接口的 MTU 和 docker 接口上的設置。 使用--mtu=BYTES設置--mtu=BYTES值的 MTU 以匹配系統接口的 MTU 值

您的問題聽起來與 Docker for Mac 存儲庫上的這個未解決的問題非常相似。 不幸的是,似乎沒有已知的解決方案,但其中的討論可能有用。 個人目前的猜測是,該錯誤存在於 Docker for Mac 上專門使用的 hyperkit 虛擬化附近。

就我而言,我奇怪地能夠通過使用不同的物理路由器繞過這個問題,但我不知道它為什么會起作用。 可悲的是,這並不是真正的“解決方案”。

我討厭這不是一個很好的答案,但我想至少在公開問題中分享討論。 祝你好運,讓我們知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM