我几个月前就遇到了这样的问题,最近决定在我的博客上描述问题以及解决方案。这是捷径。
使用
--iptables=false不会对您描述的情况有多大帮助。这根本不够。默认情况下,您的容器都不能进行任何传出连接。
您只需要走一小步,就可以在这里将集装箱放在UFW后面。您可以使用
--iptables=false或创建
/etc/docker/daemon.json内容如下的文件
{ "iptables": false}结果将是相同的,但是后一个选项要求您使用来重新启动整个docker服务,
service dockerrestart或者如果docker在禁用此功能之前有机会添加iptables规则,则甚至需要重新启动。
完成后,只需再做两件事:
$ sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw$ ufw reload
因此您可以在UFW中设置默认转发策略以接受并使用:
$ iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
这样,您所实现的就是在iptables规则中禁用Docker杂乱的行为,同时为Docker提供了必要的路由,因此容器可以很好地进行传出连接。从那时起,UFW规则仍将受到限制。
希望这能为您和任何寻求答案的人解决问题。
我在https://www.mkubaczyk.com/2017/09/05/force-docker-not-bypass-ufw-rules-
ubuntu-16-04/上更全面地描述了问题和解决方案



