Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对docker容器上的网络流量进行分级限制_Docker_Rate Limiting - Fatal编程技术网

如何对docker容器上的网络流量进行分级限制

如何对docker容器上的网络流量进行分级限制,docker,rate-limiting,Docker,Rate Limiting,我想为对等2应用程序设置docker容器。此应用程序没有应用程序级别的速率限制,因此我尝试在容器级别设置一个限制。我想限制所有端口上的传出和传入连接,但应用程序的web UI使用的端口除外。您可以使用iptables limits模块。例如,您可以使用选项“-m limit--limit 10/s”将规则添加到预路由表中,以限制特定端口每秒仅接收10个连接。我很惊讶找到这个问题的答案有多么困难。各种论坛上的大多数答案都不正确(我用两个iperf3节点对它们进行了测试,发现这些解决方案不起作用,或

我想为对等2应用程序设置docker容器。此应用程序没有应用程序级别的速率限制,因此我尝试在容器级别设置一个限制。我想限制所有端口上的传出和传入连接,但应用程序的web UI使用的端口除外。

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

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

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

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

Dockerfile(代码段):

在start-my-p2p.sh中放入类似的内容(您可能已经在互联网上搜索了
tc
cmdline):

重要提示:启动容器时,您需要使用
--cap add=NET\u ADMIN

docker run --rm -it --cap-add=NET_ADMIN -p6969:p6969 myimage
#/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 
docker run --rm -it --cap-add=NET_ADMIN -p6969:p6969 myimage