UFW没有阻止与docker实例的连接

我在使用以下命令运行的docker实例中运行了一个web服务:

sudo docker run -d -p 4040:4040 .... 

我的UFW规则如下所示:

 ~ sudo ufw status Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 4040 DENY Anywhere 22 ALLOW Anywhere (v6) 4040 DENY Anywhere (v6) 

当我通过其IP直接访问该盒子时,我可以访问端口4040.为什么ufw规则没有阻止它?

注意:作为docker安装的一部分,我改变了

DEFAULT_FORWARD_POLICY =“DROP”到DEFAULT_FORWARD_POLICY =“ACCEPT”

在/ etc / default / ufw中,根据docker工人的说明( http://docs.docker.io/en/latest/installation/ubuntulinux/#docker-and-ufw )

我有同样的问题,并通过使用IPTABLES解决它。

示例仅允许来自源ip xxx.xxx.xxx.xxx的3306:

添加一个接受源匹配我们的ip到FORWARD链的第1行

iptables -I FORWARD 1 -p tcp -i eth0 -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT

删除该端口的FORWARD链上的所有其他连接

iptables -I FORWARD 2 -p tcp -i eth0 --dport 3306 -j DROP

使用行号(1和2)强制将规则添加到docker创建的规则之上,例如:

-A FORWARD -d 0.0.0.0/32! -i docker0 -o docker0 -p tcp -m tcp –dport 3306 -j ACCEPT

有一个与此相关的已知问题。 基本上,docker正在配置UFW后面的Iptables。

更多信息:

可能的答案很短:

 Set DEFAULT_FORWARD_POLICY="ACCEPT" in /etc/default/ufw Set DOCKER_OPTS="--iptables=false" in /etc/default/docker 

尝试使用特定的IP运行容器。

 docker run -d -p 127.0.0.1:4040:4040 ...