2016-04-26 2 views
3

Я пытаюсь настроить пропускную способность в контейнерах Docker. Чтобы ограничить ширину полосы пропускания нисходящей линии связи, я могу сначала найти veth-интерфейс контейнера и использовать tc: tc qdisc add dev vethpair1 root tbf rate 1mbit latency 50ms burst 10000. Если я хочу ограничить ширину полосы восходящей линии связи, мне нужно указать --cap-add=NET_ADMIN, когда я разворачиваю контейнер и использую ту же команду tc на eth0 внутри контейнера. Есть ли какой-либо неинтрузивный способ сделать это, чтобы я мог управлять любым контейнером, не предоставляя ему привилегии?Использовать tc для дроссельной заслонки пропускной способности сети докера-докера

ответ

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 демона, а не для клиента Докер вы используете при работе 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 позже. –

Смежные вопросы