2016-01-06 3 views
2

J'utilise tc pour limiter le taux d'envoi dans un conteneur docker. Ajout ci-dessous script dans Dockerfile:Impossible d'utiliser tc dans le conteneur docker

tc qdisc add dev eth0 root handle 1: htb default 2 
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 2mbit ceil 2mbit prio 2 
tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10 
tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 192.168.1.124 flowid 1:2 

Run docker sous le compte root via cette commande:

docker run --cap-add=NET_ADMIN --name lqt_build -d -p 8443:8443 -p 443:443 -p 3478:3478 lqt_build 

Mais montrent toujours cette erreur:

Step 25 : RUN cd /usr/share/ta/ && sudo ./tt rate 
---> Running in fb6a4477ad6c 
RTNETLINK answers: Operation not permitted 
RTNETLINK answers: Operation not permitted 
RTNETLINK answers: Operation not permitted 
RTNETLINK answers: Operation not permitted 
We have an error talking to the kernel 
[8] System error: read parent: connection reset by peer 

Il semble que le noyau empêche des applications dans le conteneur de modifier certains paramètres du noyau même s'ils s'exécutent en tant que root. Je suppose que le conteneur n'a pas son propre noyau mais fonctionne sur le noyau partagé avec (potentiellement) de nombreux autres conteneurs, donc il ne peut pas être autorisé à toucher les paramètres du noyau sous-jacent. Est-ce que quelqu'un a de l'expérience avec ce problème?

+0

il semble que vous venez de modifier la carte réseau du conteneur de l'hôte, voir https://github.com/ahervieu/Docker-Cgroup-Doc – user2915097

+0

Merci. J'ai trouvé la cause première. –

Répondre

1

La cause première est l'utilisation de tc dans Dokcerfile. La capacité NET_ADMIN ne prend pas effet à ce moment-là. La commande Tc fonctionne correctement après l'exécution du conteneur docker. Merci utilisateur2915097.