1

我正在尝试使用以下命令控制是否将通过我在 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 容器中。

谷歌一直没用,所以我想知道是否还有其他人看到了这个问题和/或有解决方案?

4

4 回答 4

1

在容器内运行命令没有意义。它使用 iptables 激活过滤网桥流量。如果您想使用 iptables 过滤 docker 容器之间的流量,这很有用。所以它必须在主机上运行。

此外,您正在尝试更改内核配置,但容器没有自己的内核。所以无论如何都不允许用 sysctl 改变任何东西。

于 2015-03-03T19:32:11.760 回答
0

当您运行 docker 时,尝试映射目录。如果唯一的问题是 docker 容器中需要 hosts 目录,请尝试:

docker run -v /proc/sys/net/bridge:/proc/sys/net/bridge ...

iptables 可能需要映射更多的东西,但是,这将使该目录通过!

于 2015-02-26T15:24:16.593 回答
0

“/proc/sys/net/”中没有“bridge”目录

您应该启用 br_netfilter 以获取此目录:

    modprobe br_netfilter

该命令创建 br_netfilter 目录。

然后启用“net.bridge.bridge-nf-call-iptables”参数:

    sysctl net.bridge.bridge-nf-call-iptables=1
于 2020-09-22T12:04:33.040 回答
0

您是否尝试过以特权身份运行您的容器?

docker run --privileged -device=/proc/sys/net/bridge:/proc/sys/net/bridge

请参阅http://docs-stage.docker.com/v1.11/engine/reference/run/#runtime-privilege-and-linux-capabilities

于 2017-01-19T18:52:16.893 回答