我需要防止吞吐所有网络带宽的长时间运行的多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. 如何做码头集群或热复制码头集装箱?
- 2. 如何链接一个码头集装箱与另一个码头集装箱
- 3. 相互排斥的码头集装箱的马拉松限制
- 4. 限制码头集装箱到一个单一的CPU核心
- 5. 限制码头集装箱中的CPU核心
- 6. 如何禁用码头集装箱的根访问权限?
- 7. 码头集装箱连接
- 8. XDummy在码头集装箱
- 9. 监控码头集装箱
- 10. 暂停码头集装箱
- 11. 共享码头集装箱
- 12. 码头集装箱UUID
- 13. systemd在码头集装箱
- 14. ERR_CONNECTION_REFUSED由码头集装箱
- 15. 连接码头集装箱
- 16. OpenJ9和码头集装箱?
- 17. 在码头集装箱上使用SSL
- 18. 码头集装箱内的pip安装下载速度很慢
- 19. 如何将多行变量传递给码头集装箱?
- 20. 我可以从集装箱码头内重新启动码头集装箱吗?
- 21. 码头集装箱如何监听所有码头事件?
- 22. 如何从另一个码头集装箱启动码头-ubuntu
- 23. 在码头集装箱中安装ssh
- 24. 在码头集装箱中安装mongodb
- 25. 速率限制如何限制API
- 26. 码头集装箱VS应用集装箱
- 27. 如何限制linux上的USB2.0传输速率?
- 28. 如何在码头集装箱上运行vi?
- 29. 如何在码头集装箱内安装全局的angular-cli?
- 30. 码头集装箱中的MySQL连接