iptables中的DOCKER链是如何工作的?
我是docker的新手 最近我遇到了一些奇怪的情况。iptables中的DOCKER链是如何工作的?,docker,nginx,iptables,Docker,Nginx,Iptables,我是docker的新手 最近我遇到了一些奇怪的情况。 我在OCI(Oracle云基础设施)中创建了ubuntu实例。 当我在这个ubuntu实例中启动nginx进程时,从外部网络访问失败。 当我使用docker容器启动nginx时,从外部网络访问成功 经过一些搜索,我发现iptables中的输入链不允许tcp 80。 此外,docker将更新我的iptables以在预路由链中添加规则。 下面是命令sudoiptables-nL-tnat的结果 Chain PREROUTING (policy A
我在OCI(Oracle云基础设施)中创建了ubuntu实例。
当我在这个ubuntu实例中启动nginx进程时,从外部网络访问失败。
当我使用docker容器启动nginx时,从外部网络访问成功 经过一些搜索,我发现iptables中的输入链不允许tcp 80。
此外,docker将更新我的iptables以在预路由链中添加规则。
下面是命令sudoiptables-nL-tnat的结果
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:80
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80
但正如您在DOCKER链中所看到的,我认为退货规则总是比DNAT规则应用得更早。这意味着,DOCKER chain不做任何事情 有人能解释一下吗?
一个可能的假设是,不管规则的顺序如何,返回规则都是最后应用的。(但我不确定这是不是真的)
谢谢 返回规则实际上将首先应用,但并不意味着忽略其他规则。还有另外两个变量IN和OUT描述规则的输入和输出 您可以将
-v
添加到命令中以显示它
$ iptables -nL -v -t nat
......
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
12 720 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
1691 107K DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8601 to:172.17.0.2:8601
......