Docker 的 iptables=false 选项似乎没有达到预期的行为

Docker 的 iptables=false 选项似乎没有达到预期的行为

大家早上好。我正在运行 Ubuntu 14.04 服务器和 Docker 1.8.1,UFW 是我管理 iptables 的前端。

我需要将应用程序运行到容器中。我确实需要以下行为:

  • 我的应用程序需要连接到另一台机器的端口,比如 8888/tcp。
  • 我不希望 docker 管理我的 iptables,因此我已设置DOCKER_OPTS="--iptables=false"/etc/default/docker完成后,docker 现在应该跳到设置任何iptables 规则。

然后,我在 UFW 中完成了以下操作以使 Docker 容器连接到外界:

  • 开始DEFAULT_FORWARD_POLICY="ACCEPT"/etc/default/ufw
  • 设置net.ipv4.ip_forward=1net.ipv4.conf.all.forwarding=1/etc/sysctl.conf

我还添加了以下几行以/etc/ufw/before.rules启用 NAT 功能:

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from private network through eth0, the Internet iface on master.
-A POSTROUTING -s 172.17.42.1/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT

172.17.42.1/16docker iface 的 IP 范围在哪里。

重新启动后,我运行了sudo iptables -t nat -L -n,结果显示:

[....]
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0 

然后,由于我的DEFAULT_OUTPUT_POLICY设置为DROP,并且我想测试该iptables=false选项是否真正有效,我已经运行:

docker run -it ubuntu:14.04 bash
root@56997560933c:/# apt-get update

但是..即使主机上的 80/tcp 和 53 端口没有向外部开放,容器也能够下载更新。

我现在很疑惑...我做错了什么?我还需要做些什么才能避免docker容器使用我不允许在我的 iptables 中 (使用 UFW)?

谢谢。

完整性注意事项: 我的 iptables 中的任何链中都没有 DOCKER 的踪迹。此外,在下载更新时,如果我运行netstat,则 ssh 之外没有已建立的连接……这更奇怪……

報告这个问题另一位用户在 stackoverflow 上发帖。我认为这里就是正确的地方。

相关内容