为了让docker网络连接到主机端口,我需要什么iptable规则?

时间:2018-04-03 11:48:55

标签: docker iptables

解决:看我的评论。

我已阅读,How to access host port from docker container建议添加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访问localhost(主机)上的此端口?

1 个答案:

答案 0 :(得分:0)

  

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

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

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

或者您可以跳过网络命名空间,使用--net host将docker容器直接附加到主机的网络命名空间。这会删除一层容器隔离,并且不允许您使用docker网络与其他容器进行通信。但它确实允许您直接与容器内的127.0.0.1对话,并在主机上引用相同的环回接口。