Me gustaría ejecutar una prueba de red de alto rendimiento en un contenedor acoplable, y no quiero la sobrecarga del puente (para que las tuberías no funcionen AFAIK). Me gustaría asignar (además del dispositivo docker veth normal) una interfaz de red física de 40 GbE desde el host a un contenedor docker como en el modo lxc "phys". Esto debería hacer que la interfaz física se vuelva invisible para el host.
networking
docker
NeilenMarais
fuente
fuente
En mi búsqueda, encontré soluciones antiguas que implicaban pasar parámetros lxc-config a docker, pero las versiones más nuevas de docker ya no usan las herramientas lxc, por lo que eso no puede funcionar.
Siguiendo la sugerencia aquí: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ se encontró una solución. No busqué modificar la secuencia de comandos de la tubería como se mencionó anteriormente, sino que utilicé los comandos necesarios directamente. Consulte también la siguiente publicación del blog: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Los siguientes comandos de herramienta de espacio de nombres de red de bajo nivel (es decir, no específicos de Docker) se pueden utilizar para transferir una interfaz desde el host a un contenedor de Docker:
Una advertencia menor en el nombre de la interfaz si su host tiene muchos dispositivos ethX (el mío tenía eth0 -> eth5). Por ejemplo, digamos que mueve eth3 al contenedor como eth1 en el espacio de nombres del contenedor. Cuando detenga el contenedor, el núcleo intentará mover el dispositivo eth1 del contenedor nuevamente al host, pero observe que ya existe un dispositivo eth1. Luego cambiará el nombre de la interfaz a algo arbitrario; Me llevó un tiempo encontrarlo de nuevo. Por esta razón, edité /etc/udev/rules.d/70-persistent-net.rules (creo que este nombre de archivo es común a las distribuciones de Linux más populares; estoy usando Debian) para dar a la interfaz en cuestión un nombre único e inconfundible. y utilícelo tanto en el contenedor como en el host.
Como no estamos usando Docker para hacer esta configuración, las herramientas estándar de ciclo de vida de Docker (por ejemplo, Docker Run --restart = on-failure: 10 ...) no se pueden usar. La máquina host en cuestión ejecuta Debian Wheezy, así que escribí el siguiente script de inicio:
Ligeramente hacky, pero funciona :)
fuente
eth
? ¿Debian no hace nombres de dispositivos de red consistentes?/var/run/netns/$PID
se necesita el enlace simbólico : lo necesita para que losip netns exec $PID ...
comandos funcionen.Escribo un complemento de red de Docker para hacer esto.
https://github.com/yunify/docker-plugin-hostnic
fuente