Chciałbym uruchomić wysokowydajny test sieci w kontenerze dokowanym i nie chcę narzutu związanego z mostowaniem (aby rurociągi nie działały AFAIK). Chciałbym przypisać (oprócz zwykłego urządzenia dokującego veth) fizyczny interfejs sieciowy 40GbE od hosta do kontenera dokującego, jak w trybie lxc „phys”. Powinno to spowodować, że interfejs fizyczny stanie się niewidoczny dla hosta.
networking
docker
NeilenMarais
źródło
źródło
Podczas poszukiwań natknąłem się na stare rozwiązania, które obejmowały przekazywanie parametrów lxc-config do dokera, ale nowsze wersje dokera nie używają już narzędzi lxc, więc to nie może działać.
Zgodnie z sugestią tutaj: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ znaleziono rozwiązanie. Nie zastanawiałem się nad modyfikacją skryptu pipework, jak wspomniano powyżej, zamiast bezpośredniego użycia wymaganych poleceń. Zobacz także kolejny post na blogu: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Do przeniesienia interfejsu z hosta do kontenera dokującego można użyć następujących poleceń niskiego poziomu (tzn. Nie związanych z dokerem) narzędzi przestrzeni nazw sieciowych
Niewielkie zastrzeżenie dotyczące interfejsu, jeśli twój host ma wiele urządzeń ethX (mój miał eth0 -> eth5). Na przykład powiedz, że przenosisz eth3 do kontenera jako eth1 w przestrzeni nazw kontenerów. Gdy zatrzymasz kontener, jądro spróbuje przenieść urządzenie eth1 kontenera z powrotem na host, ale zauważ, że istnieje już urządzenie eth1. Następnie zmieni nazwę interfejsu na coś dowolnego; zajęło mi trochę czasu, aby go znaleźć ponownie. Z tego powodu edytowałem /etc/udev/rules.d/70-persistent-net.rules (myślę, że ta nazwa pliku jest wspólna dla większości popularnych dystrybucji Linuksa; używam Debiana), aby nadać interfejsowi unikalną, niepowtarzalną nazwę i użyj tego zarówno w kontenerze, jak i na hoście.
Ponieważ nie używamy dokera do wykonania tej konfiguracji, standardowe narzędzia cyklu życia dokera (np. Uruchomienie dokera --restart = w przypadku awarii: 10 ...) nie mogą być użyte. Na omawianej maszynie działa Debian Wheezy, więc napisałem następujący skrypt inicjujący:
Nieco zuchwały, ale działa :)
źródło
eth
? Czy Debian nie robi spójnych nazw urządzeń sieciowych?/var/run/netns/$PID
jest potrzebne: potrzebujesz go do działaniaip netns exec $PID ...
poleceń.W tym celu piszę wtyczkę sieci dokującej.
https://github.com/yunify/docker-plugin-hostnic
źródło