Невозможно установить net.bridge.bridge-nf-call-iptables в контейнере Docker
Я пытаюсь контролировать, будут ли пакеты, проходящие через мост, которые я настроил в моем контейнере Docker, отправляться в iptables для обработки с помощью следующей команды:
sysctl -w net.bridge.bridge-nf-call-iptables="1"
К сожалению, это не работает:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
Похоже, что в моем контейнере Docker нет каталога /proc/sys/net/bridge, несмотря на то, что каталог существует на моем хост-компьютере. Эта же команда работает при запуске на хост-машине. Я проверил, и, насколько мне известно, все правильные модули установлены на хост-машине и отображаются в контейнере Docker.
Google был бесполезен, поэтому мне интересно, видел ли кто-нибудь еще эту проблему и / или есть решение?
3 ответа
Нет смысла запускать команду внутри контейнера. Активирует фильтрацию трафика моста с помощью iptables. Это полезно, если вы хотите фильтровать трафик между контейнерами Docker с помощью iptables. Так что это должно быть запущено на хосте.
Также вы пытаетесь изменить конфигурацию ядра, но у контейнеров нет собственного ядра. Так что с sysctl все равно ничего нельзя будет изменить.
В "/proc/sys/net/" нет каталога "мост"
Вы должны включить br_netfilter, чтобы получить этот каталог:
modprobe br_netfilter
команда создает каталог br_netfilter.
Затем включите параметр net.bridge.bridge-nf-call-iptables:
sysctl net.bridge.bridge-nf-call-iptables=1
Вы пытались запустить свой контейнер как привилегированный?
docker run --privileged -device=/proc/sys/net/bridge:/proc/sys/net/bridge
См. http://docs-stage.docker.com/v1.11/engine/reference/run/
Когда вы запустите Docker, попробуйте отобразить каталог. Если единственная проблема заключается в том, что в контейнере Docker необходим каталог hosts, попробуйте:
docker run -v /proc/sys/net/bridge:/proc/sys/net/bridge ...
Для iptables может потребоваться сопоставить больше вещей, но это поможет пройти через этот каталог!