我需要防止吞吐所有網絡帶寬的長時間運行的多TB上傳,但我只能在流程級別限制其帶寬使用率(這意味着減慢整個機器的網絡接口或減慢此用戶的網絡流量)沒有工作)。幸運的是,上傳與Docker集成在一起。我能做些什麼來減緩碼頭集裝箱的出站流量?如何限制碼頭集裝箱的上傳速率?
4
A
回答
6
感謝this question我意識到您可以在容器中運行tc qdisc add dev eth0 root tbf rate 1mbit latency 50ms burst 10000
以將其上傳速度設置爲1 Mb/s。
下面是一個例子Dockerfile通過產生一個隨機文件,並在25KB/s的近似上傳速度上傳到/dev/null-as-a-service說明了這一點:
FROM ubuntu
# install dependencies
RUN apt-get update
RUN apt-get install -y iproute curl
# create a large random file to upload
RUN head -c 2M </dev/urandom > /upload.data
# rate-limit the network interface and
# upload the data when docker image is run
RUN echo "#!/bin/bash" >> /upload.sh
RUN echo "tc qdisc add dev eth0 root tbf rate 25kbps latency 50ms burst 2500" >> /upload.sh
RUN echo "curl -d @/upload.data http://devnull-as-a-service.com/dev/null" >> /upload.sh
RUN chmod a+x /upload.sh
ENTRYPOINT exec /upload.sh
假設你有這樣的Dockerfile目錄內稱爲ratelimit
這是在當前工作目錄,你可以運行它:
docker build ratelimit -t ratelimit && docker run --cap-add=NET_ADMIN ratelimit
選項使容器權限修改它的網絡接口。你可以找到文檔here。
Dockerfile首先安裝它所需的依賴關係。 iproute
提供了tc
工具,而curl
允許我們提出限速要求。安裝我們的依賴關係後,我們生成一個2MB的隨機文件來上傳。下一節將構建一個腳本文件,它將配置速率限制並開始上傳。最後,我們將該腳本指定爲容器運行時採取的操作。
該容器向網絡接口添加令牌桶過濾器,以將連接速度降至25KB/s。提供給Token Bucker Filter的選項文檔可以在here找到。
這個Dockerfile可以被修改以執行任何其他網絡任務,方法是取消對cURL的調用並在其位置執行上傳(當然,在安裝上傳需要的任何工具之後)。
相關問題
- 1. 碼頭集裝箱http請求限制
- 2. 如何做碼頭集羣或熱複製碼頭集裝箱?
- 3. 在碼頭集裝箱上安裝rdiff
- 4. 如何鏈接一個碼頭集裝箱與另一個碼頭集裝箱
- 5. 相互排斥的碼頭集裝箱的馬拉松限制
- 6. 訪問Heroku上的碼頭集裝箱
- 7. 限制碼頭集裝箱中的CPU核心
- 8. 限制個人用戶的碼頭集裝箱資源
- 9. 限制碼頭集裝箱到一個單一的CPU核心
- 10. 如何禁用碼頭集裝箱的根訪問權限?
- 11. 如何啓動碼頭集裝箱?
- 12. 暴露碼頭集裝箱碼頭
- 13. 標記碼頭集裝箱?
- 14. Python在碼頭集裝箱
- 15. ERR_CONNECTION_REFUSED由碼頭集裝箱
- 16. 連接碼頭集裝箱
- 17. 監控碼頭集裝箱
- 18. XDummy在碼頭集裝箱
- 19. 碼頭集裝箱UUID
- 20. systemd在碼頭集裝箱
- 21. 碼頭集裝箱連接
- 22. 暫停碼頭集裝箱
- 23. OpenJ9和碼頭集裝箱?
- 24. 共享碼頭集裝箱
- 25. 在碼頭集裝箱上使用SSL
- 26. 碼頭集裝箱內的pip安裝下載速度很慢
- 27. 如何集中日誌文件在碼頭集裝箱上?
- 28. 在另一個碼頭集裝箱內使用碼頭集裝箱的數據
- 29. 連接到碼頭集裝箱碼頭主機上的服務
- 30. 從碼頭集裝箱連接到主機上的碼頭0