在Ubuntu下docker + ufw的最佳实践是什么
我刚刚试用了Docker。它很棒,但似乎不能与ufw配合使用。默认情况下,docker将对iptables进行一些操作。结果不是错误,而是我的预期。有关更多详细信息,请阅读UFW
+ Docker的危险
我的目标是建立一个像
Host (running ufw) -> docker container 1 - nginx (as a reverse proxy) -> docker container 2 - node web 1
-> docker container 3 - node web 2
-> .......
我想通过ufw管理传入流量(例如,限制访问),因此我不希望docker触摸我的iptables。这是我的测试
- 新安装的Ubuntu 14.04(内核:3.13.0-53)
- Docker 1.6.2
- 启用UFW转发。(启用UFW转发)
--iptables=false
已添加到Docker守护程序中。
docker run --name ghost -v /home/xxxx/ghost_content:/var/lib/ghost -d ghostdocker run --name nginx -p 80:80 -v /home/xxxx/nginx_site_enable:/etc/nginx/conf.d:ro --link ghost:ghost -d nginx
没运气。第一个命令很好,但是第二个命令会抛出错误
Error response from daemon: Cannot start container
然后我发现了这一点:无法使用–iptables =
false链接容器#12701
运行以下命令后,一切看起来都正常。
sudo iptables -N DOCKER
但是,我注意到我无法在容器内建立任何出站连接。例如:
xxxxg@ubuntu:~$ sudo docker exec -t -i nginx /bin/bashroot@b0d33f22d3f4:/# ping 74.125.21.147
PING 74.125.21.147 (74.125.21.147): 56 data bytes
^C--- 74.125.21.147 ping statistics ---
35 packets transmitted, 0 packets received, 100% packet loss
root@b0d33f22d3f4:/#
如果我--iptables=false
从Docker守护程序中删除,那么容器的互联网连接将恢复正常,但是ufw将无法“正常”工作(根据我的定义)。
那么,docker + ufw的最佳实践是什么?谁能提供帮助?
谢谢。
巴特
回答:
我几个月前就遇到了这样的问题,最近决定在我的博客上描述问题以及解决方案。这是捷径。
使用--iptables=false
不会对您描述的情况有多大帮助。这根本不够。默认情况下,您的容器都不能进行任何传出连接。
您只需要走一小步,就可以在这里将集装箱放在UFW后面。您可以使用--iptables=false
或创建/etc/docker/daemon.json
内容如下的文件
{ "iptables": false
}
结果将是相同的,但是后一个选项要求您使用来重新启动整个docker服务,service docker
restart或者如果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/上更全面地描述了问题和解决方案
以上是 在Ubuntu下docker + ufw的最佳实践是什么 的全部内容, 来源链接: utcz.com/qa/398644.html