我正在尝试对Docker容器进行带宽限制。
为了限制下行带宽,我可以先找到容器的veth接口,然后使用tc:tc qdisc add dev vethpair1 root tbf rate 1mbit latency 50ms burst 10000
。如果我想限制上行链路带宽,我需要在启动容器时指定--cap-add=NET_ADMIN
并在容器内的eth0
上使用相同的tc命令。是否有任何非侵入性的方法,以便我可以管理任何容器而不给予它特权?
答案 0 :(得分:2)
你可以告诉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 守护程序,而不适用于运行docker run .......
时使用的Docker客户端。
你也可以通过这个来做到这一点:
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