使用tc来限制Docker容器的传出网络带宽
问题描述:
我正在尝试将带宽限制到Docker容器。 要限制下行链路带宽,我可以先找到容器的veth接口并使用tc:tc qdisc add dev vethpair1 root tbf rate 1mbit latency 50ms burst 10000
。如果我想限制上行链路带宽,我需要在启动容器时指定,并在容器内使用eth0
上的相同tc命令。有没有非侵入性的方式来做到这一点,以便我可以管理任何容器而不给予它特权?使用tc来限制Docker容器的传出网络带宽
答
您可以告诉Docker使用LXC:使用-e lxc
选项。
Create your containers with a custom LXC directive to put them into a **traffic class** :
`docker run --lxc-conf="lxc.cgroup.net_cls.classid = 0x00100001" your/image /bin/stuff`
查看official documentation了解如何将带宽限制应用于此类。
注:--storage-driver=devicemapper
和-e lxc
选项是泊坞窗守护,而不是为客户多克尔运行docker run .......
当你使用。
,你也可以通过这个做到这一点:
mkdir /var/run/netns
ln -sf /proc/`docker inspect -f '{{ .State.Pid }}' YOUR_CONTAINER`/ns/net /var/run/netns/SOME_NAME
ip netns exec SOME_NAME iptables -L -nv
感谢。我试过net_cls,但没有奏效。是否因为我没有使用LXC抽象?我会在稍后尝试LXC。 –