我需要什么 iptable 规则才能允许 docker 网络连接到主机端口?

问题描述 投票:0回答:1

已解决:请参阅我的评论。

我已经通读了,如何从 docker 容器访问主机端口,建议添加

iptables -A INPUT -i docker0 -j ACCEPT
的 iptable 规则,但是我只想在特定端口上允许这样做。

我有以下 iptable 规则:

-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 3000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3000 -j DROP

因此,目的是仅允许来自 localhost 或 docker 容器的连接,而不允许外部连接到端口 3000。

我已经尝试过:

-A INPUT -p tcp -m tcp -i docker0 --dport 3000 -j ACCEPT
,但是在使用
telnet 172.17.0.1 3000
检查时,这不允许从容器进行访问。

我现在如何允许 docker 访问本地主机(主机)上的此端口?

docker iptables
1个回答
0
投票

我现在如何允许 docker 访问本地主机(主机)上的此端口?

如果您希望容器拥有自己的网络命名空间,则不能这样做。每个单独的网络命名空间都有自己的命名空间环回接口 (127.0.0.1),该接口与主机和其他容器不同。

当容器尝试与主机上的应用程序通信时,它将需要连接到主机的可路由 IP 之一。因此,您需要 iptables 规则来允许来自 docker0 接口的流量与其他接口通信,并且应用程序需要与主机接口通信,而不是 127.0.0.1。

或者您可以跳过网络命名空间,使用

--net host
将 docker 容器直接附加到主机的网络命名空间。这消除了一层容器隔离,并且不允许您使用 docker 网络与其他容器通信。但它确实允许您直接与容器内的 127.0.0.1 通信,并使其引用主机上相同的环回接口。

© www.soinside.com 2019 - 2024. All rights reserved.