Я хотел бы запустить высокопроизводительный сетевой тест в контейнере докера и не хочу использовать издержки мостового соединения (поэтому конвейеры не будут работать AFAIK). Я хотел бы назначить (в дополнение к обычному устройству докера) физический сетевой интерфейс 40GbE от хоста к контейнеру докера, как в режиме lxc "phys". Это должно привести к тому, что физический интерфейс станет невидимым для хоста.
networking
docker
NeilenMarais
источник
источник
В своем поиске я наткнулся на старые решения, которые включали передачу параметров lxc-config в docker, но более новые версии docker больше не используют инструменты lxc, поэтому они не могут работать.
Следуя предложению здесь: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ решение было найдено. Я не смотрел на изменение сценария конвейера, как упомянуто выше, а вместо этого использовал необходимые команды напрямую. Также см. Следующий пост в блоге: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Следующие низкоуровневые (т.е. не специфичные для docker) команды инструмента сетевого пространства имен можно использовать для передачи интерфейса от хоста в контейнер Docker:
Небольшое предостережение по поводу именования интерфейсов, если на вашем хосте много устройств ethX (у меня было eth0 -> eth5). Например, вы перемещаете eth3 в контейнер как eth1 в пространстве имен контейнеров. Когда вы остановите контейнер, ядро попытается переместить устройство eth1 контейнера обратно на хост, но заметьте, что уже есть устройство eth1. Затем он переименует интерфейс в нечто произвольное; Мне понадобилось время, чтобы найти его снова. По этой причине я отредактировал /etc/udev/rules.d/70-persistent-net.rules (я думаю, что это имя файла является общим для большинства популярных дистрибутивов Linux; я использую Debian), чтобы дать рассматриваемому интерфейсу уникальное, безошибочное имя и используйте это как в контейнере, так и на хосте.
Поскольку мы не используем docker для этой конфигурации, стандартные инструменты жизненного цикла docker (например, docker run --restart = on-fail: 10 ...) использовать нельзя. Рассматриваемый хост-компьютер запускает Debian Wheezy, поэтому я написал следующий скрипт инициализации:
Немного взломан, но это работает :)
источник
eth
? Разве Debian не поддерживает согласованные имена сетевых устройств?/var/run/netns/$PID
нужна символическая ссылка : она нужна для работыip netns exec $PID ...
команд.Я пишу подключаемый модуль Docker для этого.
https://github.com/yunify/docker-plugin-hostnic
источник