Docker 和 UFW 具有真实 IP

标签 docker docker-compose ubuntu-16.04 iptables ufw

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

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

various issues但在这样做的过程中。

否则 routing "real" IP's to containers是最干净的解决方案。

关于Docker 和 UFW 具有真实 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755150/

相关文章:

node.js - PM2 EPERM,调用初始化组不允许操作

gmail - 从电子邮件标题中删除 localhost

docker 不向网络主机公开端口

c# - COPY失败:构建上下文之外的禁止路径:../API.Common.AspNetCore/API.Common.AspNetCore.csproj()

wordpress - Wordpress未在Docker端口8000上运行

docker - Docker在Zookeeper集群模式下出错?

selenium - 如何在docker-machine中使用docker-compose将文件从docker容器复制到主机

python-3.x - 如何在 Ubuntu 上运行没有 Anaconda 的 Jupyter Notebook?

docker - Docker-Compose通过服务IP

ruby-on-rails - 为什么我的 Docker PostgreSQL 容器不再运行?