как работает DOCKER цепочка в iptables? - PullRequest
0 голосов
/ 13 февраля 2020

Я новичок в docker.

Недавно я столкнулся с несколько странным сценарием.
Я создал экземпляр Ubuntu в OCI (Oracle Облачная инфраструктура).
Когда я начал nginx процесс в этом экземпляре Ubuntu, доступ из внешней сети не удается.
Когда я запустил nginx с контейнером docker, доступ из внешней сети был успешным.

После некоторого поиска я обнаружил, что цепочка INPUT в iptables не разрешает tcp 80.
Кроме того, docker обновит мои правила iptables для ADD в цепочке PREROUTING.
Вот результат команды sudo iptables -nL -t nat.

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 правило RETURN всегда применяется раньше, чем правило DNAT.
Это означает, что цепочка DOCKER ничего не делает!

Кто-нибудь может дать какие-либо объяснения по этому поводу?
Одним из возможных предположений является то, что правило RETURN применяется последним независимо от порядка правил. (Но я не уверен, что это правда или нет).

Спасибо!

...