如何对docker容器上的网络流量进行评级

时间:2014-08-26 03:22:47

标签: docker rate-limiting

我想为对等2对等应用设置docker容器。此应用程序没有应用程序级别限制,所以我试图在容器级别设置限制。我想对所有端口上的传出和传入连接进行速率限制,但是应用程序的Web UI使用该连接。

2 个答案:

答案 0 :(得分:1)

您可以使用iptables限制模块。例如,您可以使用选项" -m limit --limit 10 / s"将规则添加到PREROUTING表中。限制特定端口每秒只接收10个连接。

答案 1 :(得分:0)

我很惊讶找到这个问题的答案是多么困难。各种论坛上的大多数答案都不正确(我用两个iperf3节点测试它们,发现解决方案不起作用或仅限制一个流量方向(仅传入或仅传出)。具有更多对称数据使用的P2P应用程序比传统的客户端/服务器应用程序,因此必须限制两个方向的流量。

我发现的最好方法是限制Docker容器的网络带宽(传入和传出)是在运行容器中使用Linux自己的流量控制设置。在启动P2P应用程序之前,在容器中执行tc命令。

例如,您可以创建如下所示的启动脚本,将其复制到docker镜像中并将其作为ENTRYPOINT调用。

Dockerfile(代码段):

COPY start-my-p2p.sh /
RUN chmod +x /start-my-p2p.sh    
ENTRYPOINT /start-my-p2p.sh   

在你的start-my-p2p.sh中添加这样的内容(tc cmdlines可能就是你在互联网上搜索的内容):

#/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