Centos iptables因Docker规则而失败

时间:2019-05-18 18:24:43

标签: docker centos centos7 iptables

我已经安装了docker服务:

docker run --rm --name some-nginx -d -p 8080:80 nginx:stable-alpine

然后我为其添加了iptable规则:

PORT=8080
 /sbin/iptables -A OUTPUT -p tcp --dport $PORT -m state --state NEW,ESTABLISHED      -j ACCEPT
 /sbin/iptables -A INPUT  -p tcp --sport $PORT -m state --state ESTABLISHED  -j ACCEPT

当我尝试检查端口是否打开时,它说它是打开的:

$netstat -anp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      11211/docker-proxy

当我尝试进行更多调查时,它似乎仍然开放:

 iptables-save | grep 8080
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.17.0.3:80
-A INPUT -p tcp -m tcp --sport 8080 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT

我看到docker添加了一些规则,但是我的规则存在。

问题是我无法在给定端口上连接到nginx!

telnet XX.XX.XX.XX 8080
Trying XX.XX.XX.XX...
telnet: Unable to connect to remote host: Connection timed out

当我关闭iptables时,即使在浏览器提供了nginx起始页的情况下,它也可以正常工作。

如何启用iptables或docker使用给定端口?

1 个答案:

答案 0 :(得分:0)

我有一些页面可以阅读。

https://fralef.me/docker-and-iptables.html
https://riptutorial.com/docker/topic/9201/iptables-with-docker

我也有一个Linux,请在这里尝试:

iptables -A INPUT -p tcp -m tcp --dport xxx -j ACCEPT
iptables -A OUTPUT -p tcp --sport xxx -m state --state ESTABLISHED -j ACCEPT
or
iptables -A OUTPUT -o eth0 -p tcp --dport xxx -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport xx -m state --state ESTABLISHED -j ACCEPT

让我知道是否有帮助。