2016-04-26 5 views
3

Ich versuche, die Bandbreitendrosselung für die Docker-Container vorzunehmen. Um die Downlink-Bandbreite zu begrenzen, kann ich zuerst die veth-Schnittstelle des Containers finden und tc: tc qdisc add dev vethpair1 root tbf rate 1mbit latency 50ms burst 10000 verwenden. Wenn ich die Uplink-Bandbreite begrenzen möchte, muss ich --cap-add=NET_ADMIN angeben, wenn ich den Container hochfahre und den gleichen TC-Befehl auf eth0 innerhalb des Containers verwende. Gibt es eine nicht aufdringliche Art, dies zu tun, so dass ich jeden Container verwalten kann, ohne ihm Privilegien zu geben?Verwenden Sie tc, um die ausgehende Netzwerkbandbreite des Dockercontainers zu drosseln.

Antwort

1

Sie könnten Docker sagen, LXC unter der Haube zu verwenden: Verwenden Sie die Option -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` 

Überprüfen Sie die official documentation darüber, wie Bandbreite Grenzen dieser Klasse anzuwenden.

Hinweis: Die --storage-driver=devicemapper und -e lxc Optionen sind für die Docker Daemon, nicht für die Docker-Client Sie verwenden, wenn docker run ....... ausgeführt wird.

Sie können auch diese durch das tun:

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

Dank. Ich habe net_cls versucht, aber es hat nicht funktioniert. Liegt es daran, dass ich die LXC-Abstraktion nicht verwendet habe? Ich werde später LXC versuchen. –

Verwandte Themen