2016-04-26 381 views
3

我正在嘗試將帶寬限制到Docker容器。 要限制下行鏈路帶寬,我可以先找到容器的veth接口並使用tc:tc qdisc add dev vethpair1 root tbf rate 1mbit latency 50ms burst 10000。如果我想限制上行鏈路帶寬,我需要在啓動容器時指定​​,並在容器內使用eth0上的相同tc命令。有沒有非侵入性的方式來做到這一點,以便我可以管理任何容器而不給予它特權?使用tc來限制Docker容器的傳出網絡帶寬

回答

1

您可以告訴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 
+0

感謝。我試過net_cls,但沒有奏效。是否因爲我沒有使用LXC抽象?我會在稍後嘗試LXC。 –