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