Я новичок в 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 применяется последним независимо от порядка правил. (Но я не уверен, что это правда или нет).
Спасибо!