1

我有一个 docker 设置,它禁用了它默认的篡改行为iptables。所以一切都很好,我可以通过指定规则来允许或阻止外部世界的特定端口ufw。直到我发现无法访问客户端访问网站的真实IP的问题。我所看到的只是容器内的 172.0.0.1,它是 IPdocker0网络。

我找到了一个解决方案,要求我将以下内容添加到我的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 分配给容器。

如果您需要查看我的设置的更多详细信息,请告诉我。我很高兴发布它们。

4

2 回答 2

1

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

--userland-proxy=false

但是,这样做存在各种问题

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

于 2017-03-13T03:14:24.047 回答
1

或者考虑什么是 Ubuntu 解决方案下 docker + ufw 的最佳实践

POSTROUTING iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE解决方案对我来说效果更好。

于 2018-01-17T05:50:12.260 回答