姬長信(Redy)

在Ubuntu下,docker ufw的最佳实践是什么?


我刚尝试了Docker.它真棒,但似乎与ufw不太合作.默认情况下,docker会稍微操纵iptables.结果不是错误,而是我所期望的.
有关详细信息,请阅读The dangers of 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转发功能.(Enable UFW forwarding)
> –iptables = false已添加到Docker守护程序中.

第一次尝试

docker run --name ghost -v /home/xxxx/ghost_content:/var/lib/ghost -d ghost
docker 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

第二次尝试

然后我发现了这个:unable to link containers with –iptables=false #12701

运行以下命令后,一切看起来都正常.

sudo iptables -N DOCKER

但是,我注意到我无法在容器内建立任何出站连接.例如:

xxxxg@ubuntu:~$sudo docker exec -t -i nginx /bin/bash
root@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:/# 

如果我从Docker守护程序中删除–iptables = false,那么容器的互联网连接将恢复正常,但是ufw将无法正常工作(嗯……按照我的定义).

那么,docker ufw的最佳做法是什么?有谁可以提供一些帮助?

谢谢.

巴特.