Docker和UFW与真正的IP

我有一个docker设置,禁止其篡改iptables默认行为。 因此,所有的作品都可以完美地通过在ufw上指定规则来允许或阻止特定的端口连接到外部世界。 直到我发现无法访问访问该网站的客户端的真实IP的问题。 我看到的是我的容器内的IP地址为docker0的IP docker0networking。

我find了一个解决scheme,要求我将下面的内容添加到我的iptables

 iptables -t nat -A PREROUTING ! -i docker0 -p tcp --dport 80 -j DNAT --to-destination 172.17.0.7:80 

其中172.17.0.7是代理容器的IP。 现在的问题是这个IP往往会改变,如果它重新启动,然后我的规则将不再有效。

有没有解决这个问题的优雅的方式,而不必在静态IP分配到容器的路线,如果可能的话。

如果您需要查看有关我的设置的更多详情,请告知我们。 我很高兴发布他们。

您可以尝试在没有用户代理的情况下运行dockerd,这是掩盖IP的进程。

 --userland-proxy=false 

虽然这样做有各种各样的问题 。

否则, 将“真正的”IP路由到容器是最干净的解决scheme。