如何在运行Docker时configurationiptables

我在这里遇到了一个困难的情况,我在docker主机上设置了很多容器,运行不同的应用程序,比如mailserver,数据库,redis和某些使用其他容器作为依赖项的html应用程序。 所有已经使用hostport:containerport使用-p标志,端口不绑定到主机,他们可以在互联网上被监听。

在设置从属应用程序时,我使用主机的docker bridge IP(不是公共IP)来链接。 例如:piwik容器使用172.17.42.1:port IP连接到mysql数据库容器,该IP是用于容器联网的docker bridge的默认IP。 然后,我用nginx(在主机上)在本地主机(127.0.0.1:port)上build立一个基于dns的代理来路由到在容器内运行的应用程序。 最初在build立系统时,我认为除了需要打开的端口(80,443等)以外,所有的stream量都被丢弃,ACCEPT接口将完成这项工作。 但docker接口使用FORWARD链路到docker0桥。 该前向链使用不规则规则转发到容器IP:端口

我想要的是从sub.domin.com使用应用程序,但不应该从IP:端口或域:端口访问。 现在我刷新了所有的iptables

iptables -F iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -P INPUT DROP iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443,25,465,587,993,995 -j ACCEPT iptables -A INPUT -p udp -m multiport --dports 53 -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --sports 22,53,80,443,25,465,587,993,995 -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --sports 53 -j ACCEPT 

在iptables实现后,nginx无法路由(sub.domain.com),并给了nginx 504错误(确认DNSparsing为正确的IP)。 应用程序可以通过IP:PORT访问,包括容器应用程序在内的所有端口都可以像以前那样对互联网开放。 所以我重新启动服务器重置为默认值。 我注意到iptableslogging并不是一开始就出现的,而是在我们启动容器的时候出现。 我真的很困惑如何隐藏端口从互联网上的nginx代理路由仍然工作的方式。 容器的IP地址是可访问的。