我们有一个包含多个 docker 容器的 docker 桥。主 docker 是一个 nginx 服务器,它充当 web 主机并将所有数据转发到其他容器。
现在的要求是将连接限制在指定的 IP 地址列表中。为此,我编辑了 nginx 服务器文件:
server {
allow 127.0.0.0/8;
deny all;
...
这应该允许环回 127.0.0.1 连接。
然而,这失败了,查看 access.log 可以知道原因:所有行都以以下内容开头:
172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET
172.25.0.1
是 docker 桥接网络网关;因此 docker “忘记”了外部 ips,我无法再对其进行过滤。
我如何过滤 ips?或者将源 ips 转发给 docker?
答案1
这是预期的,也是 docker 网络的工作方式。默认情况下,您最终会在 docker 主机上得到类似虚拟网络的东西。从外部转发的连接将通过 docker0 和 NAT 到达每个容器。
为了解决这个问题,简单的答案是在 nginx 容器上使用主机网络。即 命令--network host
选项docker run
。参见:主机网络
另外,请阅读 docker 网络文档。那里有更详细的解释。 https://docs.docker.com/network/