如何将源IP转发到Docker容器而不让Docker与iptables混淆

如果你在一个Docker容器中运行一些东西(例如nginx),并将其中一个暴露的端口发布到外部世界(比如docker run -p 80:80 nginx ),那么Doc​​ker将会

  • 把这个港口暴露给公众
  • 设置iptables,以便如果通过Docker网桥(NAT)连接到容器,则nginx将仍然知道正确的源IP
  • ! 彻底打开防火墙到那个端口

我不想让任何人连接到已发布的端口,但是Docker混淆了这个问题。 所以我用--iptables=false重新启动了Docker守护进程,允许我自己pipe理防火墙。 但是,nginx现在只能看到网桥(172.18.0.1)作为源地址。

我如何控制防火墙,并将源IP地址转发到容器?