Je voudrais exécuter un test de réseau haute performance dans un conteneur Docker et je ne veux pas les frais généraux de pontage (donc les canalisations ne fonctionneront pas AFAIK). Je voudrais affecter (en plus du périphérique Docker Veth normal) une interface réseau physique 40 GbE de l'hôte à un conteneur Docker comme dans le mode lxc "phys". Cela devrait rendre l'interface physique invisible pour l'hôte.
networking
docker
NeilenMarais
la source
la source
Dans ma recherche, je suis tombé sur d'anciennes solutions qui impliquaient de passer des paramètres lxc-config à docker, mais les nouvelles versions de docker n'utilisent plus les outils lxc, donc cela ne peut pas fonctionner.
En suivant la suggestion ici: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ une solution a été trouvée. Je n'ai pas cherché à modifier le script de tuyauterie comme mentionné ci-dessus, à la place en utilisant directement les commandes requises. Voir également le billet de blog suivant: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Les commandes d'outil d'espace de noms de réseau de bas niveau (c'est-à-dire non spécifiques aux dockers) suivantes peuvent être utilisées pour transférer une interface de l'hôte vers un conteneur de docker:
Une mise en garde mineure sur le nom de l'interface si votre hôte a beaucoup de périphériques ethX (le mien avait eth0 -> eth5). Par exemple, disons que vous déplacez eth3 dans le conteneur en tant que eth1 dans l'espace de noms des conteneurs. Lorsque vous arrêtez le conteneur, le noyau essaiera de déplacer le périphérique eth1 du conteneur vers l'hôte, mais notez qu'il existe déjà un périphérique eth1. Il renommera alors l'interface en quelque chose d'arbitraire; m'a pris un certain temps pour le retrouver. Pour cette raison, j'ai édité /etc/udev/rules.d/70-persistent-net.rules (je pense que ce nom de fichier est commun à la plupart des distributions Linux populaires; j'utilise Debian) pour donner à l'interface en question un nom unique et unique. et utilisez-le à la fois dans le conteneur et sur l'hôte.
Étant donné que nous n'utilisons pas docker pour effectuer cette configuration, les outils de cycle de vie de docker standard (par exemple, docker run --restart = on-failure: 10 ...) ne peuvent pas être utilisés. La machine hôte en question exécute Debian Wheezy, j'ai donc écrit le script init suivant:
Légèrement hacky, mais ça marche :)
la source
eth
? Debian ne fait-il pas de noms de périphériques réseau cohérents?/var/run/netns/$PID
est nécessaire: vous en avez besoin pour que lesip netns exec $PID ...
commandes fonctionnent.J'écris un plugin réseau docker pour ce faire.
https://github.com/yunify/docker-plugin-hostnic
la source