Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将源IP转发到Docker容器,而不让Docker处理iptables_Docker_Firewall_Iptables_Nat_Bridge - Fatal编程技术网

如何将源IP转发到Docker容器,而不让Docker处理iptables

如何将源IP转发到Docker容器,而不让Docker处理iptables,docker,firewall,iptables,nat,bridge,Docker,Firewall,Iptables,Nat,Bridge,如果您在Docker容器中运行某些东西(例如nginx),并将其中一个公开的端口发布到外部世界(如Docker run-p 80:80 nginx),则Docker将 向公众公开该端口 设置iptables,这样如果有东西通过Docker网桥(NAT)连接到容器,那么nginx仍然知道正确的源IP !!完全打开该端口的防火墙 我不想让任何人连接到已发布的端口,但Docker会弄糟这一点。因此,我用--iptables=false重新启动了Docker守护进程,它允许我自己管理防火墙。但是,n

如果您在Docker容器中运行某些东西(例如nginx),并将其中一个公开的端口发布到外部世界(如
Docker run-p 80:80 nginx
),则Docker将

  • 向公众公开该端口
  • 设置iptables,这样如果有东西通过Docker网桥(NAT)连接到容器,那么nginx仍然知道正确的源IP
  • !!完全打开该端口的防火墙
我不想让任何人连接到已发布的端口,但Docker会弄糟这一点。因此,我用
--iptables=false
重新启动了Docker守护进程,它允许我自己管理防火墙。但是,nginx现在只将网桥(172.18.0.1)视为源地址


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

您使用的是最新的docker版本吗?或者你可以在这里提供它吗?是的,我使用的是1.10.1。我在ubuntu中测试了它,似乎是因为docker端口转发在很久以前就从iptables(afaik)中删除了,它由docker代理进程处理。即使在我停止iptables之后,我也能够访问nginx。您是否试图在MAC或OS中执行此操作请使用容器的IP设置选项
--publish
。因此,如果您使用选项
--publish=127.1.1.1:80:80
,则nginx将绑定到端口80上的本地主机,因此“任何人都无法连接到已发布的端口”。--请注意,如果您不想让任何人连接到,我不会发布端口。“任何人”是什么意思?有权访问localhost的其他人?@Auzias:一组主机需要访问容器,因此我需要在0.0.0.0(或公共IP)上发布端口。主机在公共互联网上,我只想要一组能够连接的IP地址。