作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为对等 2 对等应用程序设置一个 docker 容器。此应用程序没有应用程序级别速率限制,因此我尝试在容器级别设置限制。我想对除应用程序 Web UI 使用的端口之外的所有端口上的传出和传入连接进行速率限制。
最佳答案
我很惊讶找到这个问题的答案是多么困难。各种论坛上的大多数答案都是不正确的(我用两个 iperf3 节点测试了它们,发现这些解决方案不起作用或只限制一个方向的流量(仅传入或仅传出)。具有更多对称数据使用的 P2P 应用程序与传统的客户端/服务器应用程序相比,因此必须限制两个方向的流量。
我发现限制 Docker 容器的网络带宽(传入和传出)的最佳方法是在运行的容器中使用 Linux 自己的流量控制设置。在启动 P2P 应用程序之前在容器内执行 tc
命令。
例如,您可以创建如下所示的启动脚本,将其复制到 Docker 镜像中并将其作为入口点调用。
Dockerfile(片段):
COPY start-my-p2p.sh /
RUN chmod +x /start-my-p2p.sh
ENTRYPOINT /start-my-p2p.sh
将类似的内容放入您的 start-my-p2p.sh 中(tc
命令行可能是您一直在互联网上搜索的内容):
#/bin/sh
# Limit all incoming and outgoing network to 1mbit/s
tc qdisc add dev eth0 handle 1: ingress
tc filter add dev eth0 parent 1: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 1mbit burst 10k drop flowid :1
tc qdisc add dev eth0 root tbf rate 1mbit latency 25ms burst 10k`
# Now start your p2p application
myp2pservice -d
重要提示:启动容器时,您需要使用--cap-add=NET_ADMIN
:
docker run --rm -it --cap-add=NET_ADMIN -p6969:p6969 myimage
关于docker - 如何对 docker 容器上的网络流量进行速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497523/
我是一名优秀的程序员,十分优秀!